Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定在datagrid上选中哪个复选框并更新数据库_C#_Asp.net_Data Binding_Datagrid - Fatal编程技术网

C# 确定在datagrid上选中哪个复选框并更新数据库

C# 确定在datagrid上选中哪个复选框并更新数据库,c#,asp.net,data-binding,datagrid,C#,Asp.net,Data Binding,Datagrid,我有一个带有TemplateField和复选框的datagrid。我将根据数据库中的1或0将这些复选框标记为已选中或未选中 <asp:TemplateField HeaderText="Normal User Logging"> <ItemTemplate> <asp:CheckBox runat="server" ID="normalLogging" Checked='<%# Eval("normal_toggle")

我有一个带有TemplateField和复选框的datagrid。我将根据数据库中的1或0将这些复选框标记为已选中或未选中

<asp:TemplateField HeaderText="Normal User Logging">
        <ItemTemplate>
            <asp:CheckBox runat="server" ID="normalLogging" Checked='<%# Eval("normal_toggle") == 1 %>'
            AutoPostBack="true" />
        </ItemTemplate>
        </asp:TemplateField>


我将在这个数据网格中有多行。我想知道,每当选中一个复选框时,我将如何确定选中哪个复选框。例如,我如何知道某人单击了第三行复选框?

根据您所述,执行回发的不是复选框,而是其他按钮,因此您可以一次检查整个选择。在这种情况下,复选框不应为
AutoPostBack=“true”

也就是说,按钮的代码如下所示:

foreach (GridViewRow row in gv.Rows)
{
    CheckBox cb = row.FindControl("cb") as CheckBox;
    if (cb != null)
    {
        if(cb.Checked)
        {
            //Do your thing here
        }
    }
}
更新

OP(Justin)发布消息说,他希望为每个复选框单击更新DB。在这种情况下,解决方案是处理复选框的
OnCheckedChanged
事件:

Aspx代码:

<asp:TemplateField HeaderText="Normal User Logging">
    <ItemTemplate>
        <asp:CheckBox runat="server" ID="normalLogging" 
                      Checked='<%# Eval("normal_toggle") == 1 %>'
                      AutoPostBack="true" 
                      OnCheckedChanged="cb_CheckedChanged" 
                      yourID='<%#Eval("yourIdField") %>'/>
    </ItemTemplate>
</asp:TemplateField>

使用DataGridViewCheckBoxColumn控件类型创建列,并使用Click事件和CellContentClick,请参见下面的示例

    private void Form1_Load(object sender, EventArgs e)
    {
        DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn();
        col.Name = "ColumnName";
        col.HeaderText = "HeaderTest";
        col.TrueValue = "True";
        col.FalseValue = "False";
        this.dataGridView1.Columns.Add(col);
        this.dataGridView1.CellContentClick += new DataGridViewCellEventHandler(dataGridView1_CellContentClick);
        this.dataGridView1.CellClick += new DataGridViewCellEventHandler(dataGridView1_CellClick);
    }

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        if (this.dataGridView1.Columns[e.ColumnIndex].Name == "ColumnName")
        {
            DataGridViewCheckBoxCell cell = this.dataGridView1.CurrentCell as DataGridViewCheckBoxCell;
            if (cell.Value == cell.TrueValue) 
               //your code here            
        }
    }

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex >= 0 && this.dataGridView1.Columns[e.ColumnIndex].Name == "ColumnName")
        {
            DataGridViewCheckBoxCell cell = this.dataGridView1.CurrentCell as DataGridViewCheckBoxCell;
            if (cell.Value == cell.TrueValue) 
             {
                //your code here
             }
        }
    }

关于

否,每当选中复选框时,我都会发回。我想让它更新数据库并向用户反映。好的,看起来不错。但是,我的问题仍然是如何确定选中了哪个框。那么在后面的代码中,我怎么知道它是第四行的复选框而不是第二行呢?我只是看到复选框对象被发送,但我看不到确定它在哪一行的方法。哦,是的,你是对的。我更新了我的答案,将其包括在内。希望有帮助!哦,让我知道结果如何。我现在正在处理这个问题,从我在输出中看到的,我在呈现的标记中得到了这个:…复选框输入这里。。。所以我担心的是,当我的复选框发回时,它不会有我设置的这个自定义属性。浏览器甚至不知道如何回发,因为它只知道是否标记了复选框才能回发。
    private void Form1_Load(object sender, EventArgs e)
    {
        DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn();
        col.Name = "ColumnName";
        col.HeaderText = "HeaderTest";
        col.TrueValue = "True";
        col.FalseValue = "False";
        this.dataGridView1.Columns.Add(col);
        this.dataGridView1.CellContentClick += new DataGridViewCellEventHandler(dataGridView1_CellContentClick);
        this.dataGridView1.CellClick += new DataGridViewCellEventHandler(dataGridView1_CellClick);
    }

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        if (this.dataGridView1.Columns[e.ColumnIndex].Name == "ColumnName")
        {
            DataGridViewCheckBoxCell cell = this.dataGridView1.CurrentCell as DataGridViewCheckBoxCell;
            if (cell.Value == cell.TrueValue) 
               //your code here            
        }
    }

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex >= 0 && this.dataGridView1.Columns[e.ColumnIndex].Name == "ColumnName")
        {
            DataGridViewCheckBoxCell cell = this.dataGridView1.CurrentCell as DataGridViewCheckBoxCell;
            if (cell.Value == cell.TrueValue) 
             {
                //your code here
             }
        }
    }