在网格视图中动态更改项目模板字段

时间:2011-04-27 12:23:17

标签: asp.net

我有一个网格视图,其中包含项目模板字段中的checkboxex。如果选中复选框,则发送特定标识的邮件。现在发送邮件时,复选框应替换为符号正确的图像。现在,当任何人看到网格视图时,应该有符号的图像对于发送邮件的人是正确的,对于那些没有发送邮件的人来说应该是复选框。

//这是我的.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>

                                                                                                                                                                                                                                                           &LT;% -                                                                       - %GT;                                                                                                                                                                                                       

        </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 = "chetan.patel@sahmed.com";
        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 个答案:

答案 0 :(得分: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;
}