如何使用javascript在gridview中获取动态创建的复选框行值

时间:2019-01-29 11:11:53

标签: c# asp.net checkbox buttonclick

我创建了带有多个动态生成的复选框的网格视图,但是所有复选框都具有相同的ID。如何获取所选复选框的行值?

这是我在gridvie rowdatabound事件中的动态控件

protected void grdreport_RowDataBound(object sender, GridViewRowEventArgs e)
{
    int temp = e.Row.Cells.Count;

    temp--;

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (temp >= 3)
        {
            strheadertext1 = grdreport.HeaderRow.Cells[3].Text;

            CheckBox cb1 = new CheckBox();
            cb1.ID = "cb1";
            cb1.Text = e.Row.Cells[3].Text;

            e.Row.Cells[3].Controls.Add(cb1);
        }
    }
}

点击按钮我会获得价值

protected void BtnSave_Click(object sender, EventArgs e)
{
    foreach (GridViewRow row in grdreport.Rows)
    {
        CheckBox checkbox1 = (CheckBox)row.FindControl("cb1");
        checkbox1.Checked = true;

        if (checkbox1.Checked)
        {
            string itemname = row.Cells[0].Text;
            string particular = row.Cells[1].Text;
            string qty = row.Cells[2].Text;
        }
    }
}

但是当我获得价值时,只要我选中第二行复选框,它就会给我第一行价值

2 个答案:

答案 0 :(得分:0)

您正在对ID进行硬编码。做这样的事情:

//(or take the count of something else if this is not suitable)
int i = e.Row.Cells[3].Controls.count + 1;
CheckBox cb1 = new CheckBox();
cb1.ID = "cb" + i;

要在JavaScript中查找元素,请执行以下操作:

var checkbox = document.getElementById("checkboxid");

答案 1 :(得分:0)

您正在循环所有行,但是永远不要将值存储在循环外,因此这些值将始终是最后选中的复选框。 查看以下代码片段和写入Label1的值。这些将是每行的值。

protected void BtnSave_Click(object sender, EventArgs e)
{
    for (int i = 0; i < grdreport.Rows.Count; i++)
    {
        GridViewRow row = grdreport.Rows[i];

        CheckBox checkbox1 = (CheckBox)row.FindControl("cb1");
        if (checkbox1.Checked)
        {
            Label1.Text += string.Format("Row {0}: {1}<br>", i, row.Cells[1].Text);
        }
    }
}