Определение того, какой флажок установлен на сетке данных и обновление БД - PullRequest
1 голос
/ 07 сентября 2011

У меня есть сетка данных с шаблоном TemplateField и флажок в этом поле.Я отмечу эти флажки как отмеченные или не зависящие от 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>

В этой таблице данных будет несколько строк.Мне интересно, как я буду определять, какой флажок установлен каждый раз, когда он установлен.Например, как узнать, что человек нажал на флажок в третьей строке?

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Вы создаете свой столбец с типом элемента управления 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
             }
        }
    }

С уважением

1 голос
/ 07 сентября 2011

Исходя из того, что вы указали, PostBack будет выполнять не флажки, а какая-то другая кнопка, поэтому вы можете проверить весь выбор сразу В этом случае флажки не должны быть 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 (Джастин) опубликовал сообщение о том, что он хочет обновлять БД для каждого клика CheckBox. В этом случае решение обрабатывает событие OnCheckedChanged CheckBox:

Код 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>

Код C # сзади:

protected void cb_CheckedChanged(object sender, EventArgs e)
{
    Checkbox cb = sender as CheckBox;
    string yourID = cb.Attributes["yourID"];
    //Do your thing
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...