asp.net gridview выбор флажка - PullRequest
       17

asp.net gridview выбор флажка

7 голосов
/ 27 августа 2009

Нужна помощь, чтобы решить эту проблему.

У меня есть сетка, а внутри сетки у меня есть флажок, и после щелчка я делаю событие обратной передачи и пытаюсь обновить эту строку только в базе данных.

Это мой код флажка gridview. см. OnCheckedChanged.

<asp:TemplateField HeaderText="Sample">
  <ItemTemplate>
     <asp:CheckBox runat="server" 
                   ID="chkSample" 
                   Checked='<%# Bind("Sample") %>' 
                   OnCheckedChanged="UpdateSupplyLed" 
                   AutoPostBack="True">
    </asp:CheckBox> 
  </ItemTemplate>
</asp:TemplateField>

Код:

protected void UpdateSupplyLed(object sender, EventArgs e)
{
    foreach (GridViewRow di in SamplingGridView.Rows)    
    {        
        CheckBox chkBx = (CheckBox)di.FindControl("chkSample");
        if (chkBx != null && chkBx.Checked)
        {
            //update database logic here.
        }
    }
}

Приведенный выше код работает нормально, но он получает мне все флажки, которые отмечены независимо от того, который я только что установил. Я не хочу их всех.

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

Я думаю, что я правильно понял мой вопрос!

Обновление: ответ:

protected void UpdateSupplyLed(object sender, EventArgs e)
{
    CheckBox chkSampleStatus = sender as CheckBox;        
    bool sample = chkSampleStatus.Checked;            
    GridViewRow row = chkSampleStatus.NamingContainer as GridViewRow;        
    TextBox txtId = row.FindControl("Id") as TextBox;            
    int id = Int32.Parse(txtId.Text);
}

Ответы [ 2 ]

7 голосов
/ 27 августа 2009

Попробуйте это:

CheckBox chkBx = sender as CheckBox;

Вместо того, чтобы повторять все строки.

Я не использовал CheckBox в GridView таким образом. Обычно вместо этого я использовал бы событие OnRowCommand GridView и использовал бы значение RowIndex или CommandArgument для обновления базы данных.

Думая об этом, OnRowcommand может оказаться непростым делом для запуска CheckBox, лучшее решение может заключаться в том, чтобы придерживаться события CheckChanged флажка и перейти на серверную сторону GridViewRow с помощью элементов управления NamingContainer. Что-то вроде:

GridViewRow row = chkBx.NamingContainer as GridViewRow;

Я предполагаю, что идет CheckBox => Cell => Row, если вы используете Google ASP.NET NamingContainer, вы получите некоторые дополнительные подробности.

0 голосов
/ 27 января 2012

Попробуйте также, если выше не работает точно

DataTable dtGetStTable = (DataTable)ViewState["dtNewStudents"];

//Looping throgh Grid and deleting row after finding the checked row
for (int i = dtGetStTable.Rows.Count - 1; i > -1; i--)
{
GridViewRow row = GridView1.Rows[i];
bool isChecked = ((CheckBox)row.FindControl("CheckBox1")).Checked;

if (isChecked)
{
    try
    {
        string RollNo = dtGetStTable.Rows[i]["RollNo"].ToString();
        string Class = dtGetStTable.Rows[i]["Class"].ToString();
        string Division = dtGetStTable.Rows[i]["Division"].ToString();
        //Deleting the Reocrd from DataBase
        TotalRecordDeleted += objSRE.DeleteTheSelectedRecord(RollNo, Class, Division);

        dtGetStTable.Rows[i].Delete();
        dtGetStTable.AcceptChanges();
    }
    catch (Exception ex)
    {

        //throw;
    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...