2011-04-27 113 views
0

我有一個網格視圖,其中包含項目模板字段中的checkboxex。如果複選框被選中,則發送郵件特定ID。現在當發送郵件時,複選框應該被符號正確的圖像取代。現在,當任何人查看網格視圖時,應該有帶有符號的圖像對於發送郵件的人是正確的,對於那些未發送郵件的人,應該有複選框。在網格視圖中動態更改項目模板字段

//這是我的.aspx頁面中

<%@ Page Title="Search candidates based on vacancy" Language="C#" MasterPageFile="~/HR Department/hrmasterpage.master" 
    AutoEventWireup="true" CodeFile="searcAppForVac.aspx.cs" Inherits="HR_Department_searcAppForVac" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
<table width="100%"> 
    <tr> 
     <td> 
      &nbsp; 
     </td> 
    </tr> 
    <tr> 
     <td align="center" class="tdtitle"> 
      Search Candidates 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <asp:ScriptManager ID="ScriptManager1" runat="server"> 
      </asp:ScriptManager> 
      <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
       <ContentTemplate> 
        <table width="100%"> 
         <tr> 
          <td class="RowHeight" width="20%"> 
           Select Company 
          </td> 
          <td width="30%"> 
           <asp:DropDownList ID="companyList" runat="server" AppendDataBoundItems="true" AutoPostBack="True" 
            OnSelectedIndexChanged="companyList_SelectedIndexChanged" Width="150px"> 
            <asp:ListItem Text="-Select Company-" Value="-1"></asp:ListItem> 
           </asp:DropDownList> 
          </td> 
          <td width="20%"> 
           Select Department 
          </td> 
          <td width="30%"> 
           <asp:DropDownList ID="deptList" runat="server" AppendDataBoundItems="true" AutoPostBack="True" 
            onclick="Validate();" OnSelectedIndexChanged="deptList_SelectedIndexChanged" 
            Width="150px"> 
            <asp:ListItem Value="-1">-Select Department-</asp:ListItem> 
           </asp:DropDownList> 
          </td> 
         </tr> 
         <tr> 
          <td class="RowHeight" width="20%"> 
           Select Vacancy 
          </td> 
          <td colspan="3" width="*"> 
           <asp:DropDownList ID="vacanyList" runat="server" AppendDataBoundItems="true" 
            Width="200px" AutoPostBack="True" 
            onselectedindexchanged="vacanyList_SelectedIndexChanged"> 
            <asp:ListItem Value="-1">-Select Vacancy-</asp:ListItem> 
           </asp:DropDownList> 
          </td> 
         </tr> 
         <tr> 
          <td colspan="4" align="center"> 
           &nbsp; 
           <asp:Label ID="notifyLbl" runat="server" Font-Size="Large" ForeColor="Red" 
            Text="Label"></asp:Label> 
          </td> 
         </tr> 
         <tr> 
          <td colspan="4"> 
           <asp:Label ID="titleLbl" runat="server" Font-Size="Large" ForeColor="Red" 
            Text="Label"></asp:Label> 
          </td> 
         </tr> 
         <tr> 
          <td colspan="4"> 
           &nbsp;</td> 
         </tr> 
         <tr> 
          <td colspan="4"> 
           <asp:GridView ID="appForVacGrid" runat="server" AutoGenerateColumns="False" 
           CellPadding="4" 
            onpageindexchanging="appForVacGrid_PageIndexChanging" GridLines="None" 
            CssClass="mGrid" DataKeyNames="AppId"> 
            <RowStyle BackColor="#EFF3FB" /> 
            <Columns> 
             <asp:TemplateField> 
              <HeaderTemplate> 
               App.ID 
              </HeaderTemplate> 
              <ItemTemplate> 
               <asp:Label ID="appIdLbl" runat="server" Text='<%# Eval("AppId") %>'></asp:Label> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
               First Name 
              </HeaderTemplate> 
              <ItemTemplate> 
               <asp:Label ID="firstNameLbl" runat="server" Text='<%# Eval("AppFirstName") %>'></asp:Label> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
               Last Name 
              </HeaderTemplate> 
              <ItemTemplate> 
               <asp:Label ID="lastNameLbl" runat="server" Text='<%# Eval("AppLastName") %>'></asp:Label> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
               Qualification 
              </HeaderTemplate> 
              <ItemTemplate> 
               <asp:Label ID="qualiNameLbl" runat="server" Text='<%# Eval("QualiName") %>'></asp:Label> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
               &nbsp;Experience 
              </HeaderTemplate> 
              <ItemTemplate> 
               <asp:Label ID="Label1" runat="server" Text='<%# Eval("TotalExpYear") %>'></asp:Label> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
               EmailId 
              </HeaderTemplate> 
              <ItemTemplate> 
               <asp:Label ID="emailLbl" runat="server" Text='<%# Eval("AppEmailId1") %>'></asp:Label> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
               Send Mail 
              </HeaderTemplate> 
              <ItemTemplate> 
               <asp:CheckBox ID="sendMailBox" runat="server" /> 
              </ItemTemplate> 
             </asp:TemplateField> 
            </Columns> 
            <FooterStyle Font-Bold="True" ForeColor="White" 
             HorizontalAlign="Right" /> 
            <PagerStyle ForeColor="White" HorizontalAlign="Center" 
             VerticalAlign="Top" CssClass="pgr" /> 
            <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
            <HeaderStyle Font-Bold="True" ForeColor="White" 
             Font-Size="Medium" HorizontalAlign="Left" /> 
            <AlternatingRowStyle CssClass="alt" /> 
           </asp:GridView> 
          </td> 
         </tr> 
         <tr> 
          <td colspan="4" align="center"> 
           &nbsp;<asp:Label ID="noSelectionLbl" runat="server" Font-Bold="True" 
            Font-Size="Large" ForeColor="Red" Text="Label"></asp:Label> 

  <%的代碼 -   - %>

 </td> 
    </tr> 
    <tr> 
     <td> 
      &nbsp; 
     </td> 
    </tr> 
    <tr> 
     <td> 
      &nbsp; 
     </td> 
    </tr> 
</table> 

<script type="text/javascript"> 

    function alertOnBadSelection() { 
     var select = document.getElementById('companyList'); 
     if (select.options[select.selectedIndex].value == "-Select Company-") { 
      alert('Please Select Company!'); 
      return false; 
     } 
    } 

</script> 

</asp:Content> 

//這是我的.aspx.cs頁

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Collections; 

public partial class HR_Department_searcAppForVac : System.Web.UI.Page 
{ 
DataOperation oDo = new DataOperation(); 
AppVacancyDetailClass objAppVacDetail = new AppVacancyDetailClass(); 
protected void Page_Load(object sender, EventArgs e) 
{ 
    //SET LABLE VISIBILITY TO FALSE. 
    notifyLbl.Visible = false; 
    titleLbl.Visible = false; 
    sendMailBtn.Visible = false; 
    noSelectionLbl.Visible = false; 

    //SET GRIDVIEW'S PAGGING PROPERTY. 
    appForVacGrid.AllowPaging = true; 
    appForVacGrid.PageSize = 3; 

    try 
    { 
     if (!IsPostBack) 
     { 
      Session.Clear(); 
      //DISABLE DEPARTMENT DROPDOWN LIST AND VACANCY DROPDOWN LIST TILL COMPANY IS NOT SELECTED. 
      deptList.Enabled = false; 
      vacanyList.Enabled = false; 
      //FILL COMPANY DROPDOWN LIST HERE. 
      DataTable objCmpnyTable = oDo.DropDownList("select * from tblCompanyMaster"); 
      if (objCmpnyTable.Rows.Count > 0) 
      { 
       companyList.DataSource = objCmpnyTable; 
       companyList.DataValueField = "CompId"; 
       companyList.DataTextField = "CompName"; 
       companyList.DataBind(); 
      } 
      else 
      { 
       notifyLbl.Visible = true; 
       notifyLbl.Text = "There is no company in the list."; 
      } 
     } 
     else 
     { 
      //DISABLE ALL DROPDOWN LISTS IF COMPANY DROPDOWN LIST IS SET TO ITS DEFAULT VALUE. 
      if (companyList.SelectedIndex <= 0) 
      { 
       deptList.Enabled = false; 
       vacanyList.Enabled = false; 
      } 
     } 
    } 
    catch (Exception) 
    { 
      throw; 
    } 
} 
protected void companyList_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    //DISABLE VACANCY LIST IF DEPARTMENT IS NOT SELECTED. 
    vacanyList.Enabled = false; 
    //CLEAR GRIDVIEW WHEN NEW COMPANY IS SELECTED. 
    appForVacGrid.DataSource = null; 
    appForVacGrid.DataBind(); 
    try 
    { 
     if (companyList.SelectedIndex > 0) 
     { 
      deptList.Enabled = true; 
      deptList.Items.Clear(); 
      string str = "select * from vwCompWiseList where CompId=" + companyList.SelectedValue; 
      DataTable objDeptTable = oDo.DropDownList("select DeptId,DeptName from vwCompWiseDept where CompId= "+companyList.SelectedValue); 
      if (objDeptTable.Rows.Count > 0) 
      { 
       deptList.DataSource = objDeptTable; 
       deptList.DataTextField = "DeptName"; 
       deptList.DataValueField = "deptId"; 
       deptList.DataBind(); 
       //SET DEPARTMENT DROPDOWN LIST TO ITS BEFORE FIRST VALUE 
       deptList.Items.Insert(0, new ListItem("--Select Department--", "-1")); 
      } 
      else 
      { 
       deptList.Items.Insert(0, new ListItem("--No Departments--", "-1")); 
       notifyLbl.Visible = true; 
       notifyLbl.Text = "No Departments Available in " + companyList.SelectedItem.Text; 
      } 
     } 
     else 
     { 
      notifyLbl.Visible = true; 
      notifyLbl.Text = "Select Company...."; 
      //CLEAR GRIDVIEW 
      appForVacGrid.DataSource = null; 
      appForVacGrid.DataBind(); 
     } 
    } 
    catch (Exception) 
    { 

     throw; 
    }  
} 
protected void deptList_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    try 
    { 
     if (deptList.SelectedIndex > 0) 
     { 
      //ENABLE VACANCY DROPDOWN LIST WHEN DEPARTMENT IS SELECTED. 
      vacanyList.Enabled = true; 
      //CLEAR OLD VALUE AND REFILL VACANCY DROPDOWN LIST. 
      vacanyList.Items.Clear(); 

      //GET VACANCIES. 
      DataTable objVacancytbl = oDo.DropDownList("select VacId,VacTitle from tblVacancyMaster where DeptId =" + deptList.SelectedValue + " and CompId=" + companyList.SelectedValue); 
      if (objVacancytbl.Rows.Count > 0) 
      { 
       vacanyList.DataSource = objVacancytbl; 
       vacanyList.DataValueField = "VacId"; 
       vacanyList.DataTextField = "VacTitle"; 
       vacanyList.DataBind(); 
       //SET VACANCY DROPDOWN LIST BEFORE FIRST VALUE. 
       vacanyList.Items.Insert(0, new ListItem("--Select Vacancy--", "-1")); 
       appForVacGrid.DataSource = null; 
       appForVacGrid.DataBind(); 
      } 
      else 
      { 
       notifyLbl.Visible = true; 
       notifyLbl.Text = "ALL VACANCIES ARE CLOSED IN "+" "+deptList.SelectedItem.Text.ToUpper(); 
       vacanyList.Enabled = false; 
       appForVacGrid.DataSource = null; 
       appForVacGrid.DataBind(); 
      } 
     } 
     else 
     { 
      notifyLbl.Visible = true; 
      notifyLbl.Text = "Select Department..."; 
      //CLEAR GRIDVIEW. 
      appForVacGrid.DataSource = null; 
      appForVacGrid.DataBind(); 
      vacanyList.Enabled = false; 
     } 
    } 
    catch (Exception) 
    { 

     throw; 
    } 
} 
protected void vacanyList_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    try 
    { 
     //FILTER APPLICANTS FOR PERTICULAR VACANCY IN SELECTED DEPARTMETN OF SELECTED COMPANY. 
     DataTable AppListTbl = objAppVacDetail.GetValue("CompId=" + companyList.SelectedValue + " and DeptId=" + deptList.SelectedValue + " and VacId=" + vacanyList.SelectedValue); 
     if (AppListTbl.Rows.Count > 0) 
     { 
      appForVacGrid.DataSource = AppListTbl; 
      appForVacGrid.DataBind(); 
      appForVacGrid.Columns[5].Visible = false; 
      appForVacGrid.Columns[0].Visible = false; 
      Session.Add("snAppListTbl", AppListTbl); 
      titleLbl.Visible = true; 
      titleLbl.Text = AppListTbl.Rows.Count.ToString() + " " + "CANDIDATE(S) ARE ELIGIBLE FOR THE POST OF" + " " + vacanyList.SelectedItem.Text.ToUpper() + "."; 
      sendMailBtn.Visible = true; 
     } 
    } 
    catch (Exception) 
    { 

     throw; 
    } 
} 
protected void appForVacGrid_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    try 
    { 
     //FUNCTION TO PERSIST CHECKBOX STATE IN GRIDVIEW DURING PAGGINATION(POSTBACK). 
     RememberOldValues(); 
     titleLbl.Visible = true; 
     titleLbl.Text = ((DataTable)Session["snAppListTbl"]).Rows.Count.ToString() + " " + "CANDIDATE(S) ARE ELIGIBLE FOR THE POST OF" + " " + vacanyList.SelectedItem.Text.ToUpper() + "."; 
     appForVacGrid.PageIndex = e.NewPageIndex; 
     appForVacGrid.DataSource = (DataTable)Session["snAppListTbl"]; 
     appForVacGrid.DataBind(); 
     //FUNCTION TO SET CHECKBOX TO ITS PREVIOUS VALUE DURING PAGGINATION. 
     RepopulateValues(); 
     sendMailBtn.Visible = true; 
    } 
    catch (Exception) 
    { 

     throw; 
    } 
} 
protected void sendMailBtn_Click(object sender, EventArgs e) 
{ 
    DataTable AppListTable = ((DataTable)Session["snAppListTbl"]); 
    //FUNCTION TO PERSIST CHECKBOX STATE IN GRIDVIEW DURING POSTBACK 
    RememberOldValues(); 
    if (Session["CheckBoxValue"] != null) 
    { 
     //RESET PAGGING PROPERTY AND REBIND GRIDVIEW . 
     appForVacGrid.AllowPaging = false; 
     appForVacGrid.PageSize = AppListTable.Rows.Count; 
     appForVacGrid.DataSource = AppListTable; 
     appForVacGrid.DataBind(); 

     //SET VARIABLES 
     ArrayList AppIdList = (ArrayList)Session["CheckBoxValue"]; 
     string strToId = "", strMailBody = "", strCcId = "", strBccId = ""; 
     string strFromId = "[email protected]"; 
     string strVacTitle = vacanyList.SelectedItem.Text; 
     string strCompName = companyList.SelectedItem.Text; 
     string strSubject = "Regarding Selection of Your Resume"; 

     //GET APPLICANT'S EMAILID IF CHECKBOX IS CHECKED. 
     foreach (GridViewRow Row in appForVacGrid.Rows) 
     { 
      int intIndex = (int)appForVacGrid.DataKeys[Row.RowIndex].Value; 
      if (AppIdList.Contains(intIndex)) 
      { 
       if (strToId == "") 
        strToId = ((Label)Row.FindControl("emailLbl")).Text; 
       else 
        strToId += "," + ((Label)Row.FindControl("emailLbl")).Text; 
      } 
     } 
     //CREATE MAILBODY. 
     strMailBody = CommonProcedures.GetMailBody(strVacTitle, strCompName); 
     //SEND MAIL. 
     bool isMailSent = true;// CommonProcedures.SendMail(strFromId, strToId, strCcId, strBccId, strSubject, null, strMailBody, false); 
     if (isMailSent) 
     { 
      titleLbl.Visible = true; 
      titleLbl.Text = "MAIL HAS BEEN SENT TO THE SELECTED APPLICANTS"; 
      sendMailBtn.Visible = true; 
     } 
     else 
     { 
      titleLbl.Visible = true; 
      titleLbl.Text = "MAIL SENDING FAIL.... TRY AGAIN LATER.."; 
      sendMailBtn.Visible = true; 
     } 

     //RESET PAGGING PROERTY AND REBIND GRIDVIEW. 
     appForVacGrid.AllowPaging = true; 
     appForVacGrid.PageSize = 3; 
     appForVacGrid.DataSource = AppListTable; 
     appForVacGrid.DataBind(); 
     sendMailBtn.Visible = true; 
     Session.Clear(); 
    } 
    else 
    { 
     noSelectionLbl.Visible = true; 
     noSelectionLbl.Text = "NO APPLICANT IS SELECTED..."; 
     sendMailBtn.Visible = true; 
    } 

} 

//FUNCTION TO PERSIST STATE OF CHECKBOX IN GRIDVIEW 
private void RememberOldValues() 
{ 
    ArrayList AppIdList = new ArrayList(); 
    int intIndex = -1; 
    foreach (GridViewRow Rows in appForVacGrid.Rows) 
    { 
     intIndex = (int)appForVacGrid.DataKeys[Rows.RowIndex].Value; 
     CheckBox sendMailBox = ((CheckBox)Rows.FindControl("sendMailBox")); 
     if (Session["CheckBoxValue"] != null) 
     { 
      AppIdList = (ArrayList)Session["CheckBoxValue"]; 
     } 
     if (sendMailBox.Checked) 
     { 
      if (!AppIdList.Contains(intIndex)) 
       AppIdList.Add(intIndex); 
     } 
     else 
      AppIdList.Remove(intIndex); 
    } 
    if (AppIdList.Count > 0 && AppIdList!=null) 
    { 
     Session["CheckBoxValue"] = AppIdList; 
    } 
} 
//FUNCTION TO SET CHECKBOX VALUE AFTER POSTBACK. 
private void RepopulateValues() 
{ 
    if (Session["CheckBoxValue"] != null) 
    { 
     ArrayList AppIdList = (ArrayList)Session["CheckBoxValue"]; 
     if (AppIdList.Count > 0 && AppIdList != null) 
     { 
      foreach (GridViewRow Row in appForVacGrid.Rows) 
      { 
       int intIndex = (int)appForVacGrid.DataKeys[Row.RowIndex].Value; 
       if (AppIdList.Contains(intIndex)) 
       { 
        CheckBox sendMailBox = (CheckBox)Row.FindControl("sendMailBox"); 
        sendMailBox.Checked = true; 
       } 
      } 
     } 
    } 
} 

}

請指導我如何能實現我的目標代碼?

回答

1
<asp:TemplateField> 
    <HeaderTemplate> 
    Send Mail 
    </HeaderTemplate> 
    <ItemTemplate> 
    <asp:CheckBox ID="sendMailBox" runat="server" /> 
    <asp:img id="CorrectImg" runat="server" imagesrc="yourpathhere" visible="false"/> 
    </ItemTemplate>           
</asp:TemplateField> 

在那麼請在您的RowDataBound方法:

if (Convert.ToBoolean(Databinder.Eval("IsCorrect")) 
{ 
    e.Row.FindControl("sendMailBox").Visible = false; 
    e.Row.FindControl("CorrectImg").Visible = true; 
}