在ASP.NET中的DATAGRID中找出一个CHECKBOX

时间:2010-10-13 15:42:16

标签: c# asp.net web-controls

我有一个GRIDVIEW和几个CHECKBOXS。

当我选择CHECKBOX时,我需要运行一些代码。

为了检测它,我使用EVID HANDLER作为GRIDVIEW中包含的CHECKBOX。

我无法使用错误的代码访问CHECKBOX。

你知道我做错了什么吗?谢谢你的帮助。再见

ASPX

    <asp:Label ID="uxMessageDisplayer" runat="server" Visible="False" EnableViewState="False"></asp:Label>
<asp:GridView ID="uxUserListDisplayer" runat="server" AutoGenerateColumns="False"
    OnRowDataBound="uxUserListDisplayer_RowDataBound">
    <Columns>
        <asp:TemplateField HeaderText="Active">
            <ItemTemplate>
                <asp:CheckBox ID="uxActiveCheckBoxSelector" runat="server" AutoPostBack="true" OnCheckedChanged="uxRoleCheckBoxSelector_CheckChanged" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Users">
            <ItemTemplate>
                <asp:Label runat="server" ID="uxUserNameLabelDisplayer" Text='<%# Container.DataItem %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:LinkButton ID="uxLinkEditButton" runat="server" CausesValidation="False" CommandName="Edit"
                    Text="Edit"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:LinkButton ID="uxLinkDeleteButton" runat="server" CausesValidation="False" CommandName="Delete"
                    Text="Delete"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

代码背后

    protected void uxRoleCheckBoxSelector_CheckChanged(object sender, EventArgs e)
    {
         // Reference the CheckBox that raised this event   
        //CheckBox uxActiveCheckBoxSelector = sender as CheckBox;

        CheckBox activeCheckBox = (CheckBox)FindControl("uxActiveCheckBoxSelector");

        if (activeCheckBox.Checked == true)
        {
            uxMessageDisplayer.Text = "T - Aproved User";
            uxMessageDisplayer.Enabled = false;
        }
        else
        {
            uxMessageDisplayer.Text = "F - NOT Aproved User";
            uxMessageDisplayer.Enabled = false;
        }
       }

3 个答案:

答案 0 :(得分:2)

如果我没有弄错你的问题,那么您正尝试根据其检查状态,使用checkbox在同一行上设置标签文字。

下面是我在电脑上试过的代码片段,希望有所帮助。


的.aspx:

<asp:GridView ID="GridView1" runat="server">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="CheckBox1" runat="server" OnCheckedChanged="CheckBox1_CheckChanged" AutoPostBack="true" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>


的.cs:

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
        return;

    //create dummy data
    List<string> rows = new List<string>();
    Enumerable.Range(1, 5).ToList().ForEach(x => rows.Add(x.ToString()));

    //bind dummy data to gridview
    GridView1.DataSource = rows;
    GridView1.DataBind();
}

    protected void CheckBox1_CheckChanged(object sender, EventArgs e)
    {
        //cast sender to checkbox
        CheckBox CheckBox1 = (CheckBox)sender;

        //retrieve the row where checkbox is contained
        GridViewRow row = (GridViewRow)CheckBox1.NamingContainer;

        //find the label in the same row
        Label Label1 = (Label)row.FindControl("Label1");

        //logics
        if (CheckBox1 != null)  //make sure checkbox1 is found
        {
            if (CheckBox1.Checked)
            {
                if (Label1 != null) //make sure label1 is found
                {
                    Label1.Text = "Checked";
                }

            }
            else
            {
                if (Label1 != null)
                {
                    Label1.Text = "Unchecked";
                }
            }
        }
    }

答案 1 :(得分:1)

我假设事件处理程序实际上已注册到复选框。

CheckBox activeCheckBox = (CheckBox)sender;

什么是"uxActiveCheckBoxSelector",你为什么忽略sender

答案 2 :(得分:0)

代码更正为建议! Usefull resource for beginners

        protected void uxRoleCheckBoxSelector_CheckChanged(object sender, EventArgs e)
    {
        // Cast sender to CheckBox
        CheckBox activeCheckBox = (CheckBox)sender;

        // Retrieve the row where CheckBox is contained (NamingContainer used to retrive parent control
        GridViewRow row = (GridViewRow)activeCheckBox.NamingContainer;

        if (activeCheckBox.Checked == true)
        {
            uxMessageDisplayer.Text = "T - Aproved User";
        }
        else
        {
            uxMessageDisplayer.Text = "F - NOT Aproved User";
        }
    }