Asp.net 如何获取选中复选框的gridview中的值?

Asp.net 如何获取选中复选框的gridview中的值?,asp.net,c#-4.0,gridview,checkbox,Asp.net,C# 4.0,Gridview,Checkbox,嗨,我有一个网格视图,其中有一个复选框列 当用户检查并点击按钮时 这就是我的网格的外观 checkboxColumn|ID|CustomerNAme -------------------------------------- 1|asjd 2|asdfas 3|asdjka assign(

嗨,我有一个网格视图,其中有一个复选框列

当用户检查并点击按钮时 这就是我的网格的外观

         checkboxColumn|ID|CustomerNAme
      --------------------------------------
                        1|asjd
                        2|asdfas
                        3|asdjka

                assign(Button)
当用户检查所需的行时,我只想将grid和stoer的ID值输入数据库

       protected void BtnAssignWork_Click(object sender, EventArgs e)
{

    for (int i = 0; i < GrdCustomerData.RowsInViewState.Count; i++)
    {
        GridDataControlFieldCell cell = GrdCustomerData.RowsInViewState[i].Cells[0] as GridDataControlFieldCell;
        CheckBox chk = cell.FindControl("Chkselect") as CheckBox;

        if (chk.Checked == true)
        {
            var allIDs = (from item in GrdCustomerData.Rows.Cast<GridRow>()                              
                          let id = int.Parse(item.Cells[1].Text)
                          where chk.Checked
                          select id).ToList();
            using (var myconn = new SqlConnection(connstring))
            {
                foreach (var id in allIDs)
                {
                    using (var mycomm = new SqlCommand("SP_AssignedWork", myconn))
                    {
                        myconn.Open();
                        mycomm.CommandType = CommandType.StoredProcedure;
                        mycomm.Parameters.Add("@LoanID", SqlDbType.VarChar).Value = id;
                        mycomm.Parameters.Add("@EmpID", SqlDbType.VarChar).Value = DDLSelectEmployee.SelectedValue;
                        mycomm.ExecuteNonQuery();
                        myconn.Close();
                    }
                }
            }

        }
protectedvoidbtnaSignwork\u单击(对象发送方,事件参数e)
{
对于(int i=0;i

有人能帮我吗?..

使用Gridviewrows类从该使用单元格[1]中查找当前行,该单元格表示该单元格中的控件,您可以从中获取id

您可以使用属性获取当前选定的行,然后从该行获取所需的单元格。类似于:

 GridViewRow row = CustomersGridView.SelectedRow;
 int CustomerId = int.parse(row.Cells[2].Tex);

假设您使用的是
模板字段
和带有
ID=“Chkselect”
复选框

protectedvoidbtnaSignwork\u单击(对象发送方,事件参数e){
var allIDs=(来自GrdCustomerData.Rows.Cast()中的项)
设chk=(复选框)项。单元格[0]。FindControl(“Chkselect”)
让id=int.Parse(item.Cells[1].Text)
chk在哪里检查的
选择id.ToList();
使用(var myconn=newsqlconnection(connstring)){
myconn.Open();
foreach(allid中的varid){
使用(var mycomm=new SqlCommand(“SP_AssignedWork”,myconn)){
mycomm.CommandType=CommandType.storedProcess;
mycomm.Parameters.Add(“@LoanID”,SqlDbType.Int).Value=id;
mycomm.Parameters.Add(“@EmpID”,SqlDbType.Int).Value=Int.Parse(DDLSelectEmployee.SelectedValue);
mycomm.ExecuteNonQuery();
}
}
}
}

编辑:为了澄清,我将这两个部分合并在一起。您不需要额外的行循环,因为LINQ查询已经这样做了。

我解决我的答案的任何方法

以下是代码,我希望它可能对某些人有所帮助

    void grid1_RowDataBound(object sender, GridRowEventArgs e)
{
    if (e.Row.RowType == GridRowType.DataRow && GrdCustomerData.RowsInViewState.Count > 0)
    {
        GridDataControlFieldCell cell = e.Row.Cells[0] as GridDataControlFieldCell;
        CheckBox chk = cell.FindControl("Chkselect") as CheckBox;

        GridDataControlFieldCell cellInViewState = GrdCustomerData.RowsInViewState[e.Row.RowIndex].Cells[0] as GridDataControlFieldCell;
        CheckBox chkInViewState = cellInViewState.FindControl("Chkselect") as CheckBox;

        if (cell.Value == chkInViewState.ToolTip)
        {
            chk.Checked = chkInViewState.Checked;
        }
    }
}

protected void BtnAssignWork_Click(object sender, EventArgs e)
{
    string LoanIds = "";

    for (int i = 0; i < GrdCustomerData.RowsInViewState.Count; i++)
    {
        GridDataControlFieldCell cell = GrdCustomerData.RowsInViewState[i].Cells[0] as GridDataControlFieldCell;
        CheckBox chk = cell.FindControl("Chkselect") as CheckBox;

        if (chk.Checked == true)
        {
            if (!string.IsNullOrEmpty(LoanIds))
               LoanIds += "";

           LoanIds = chk.ToolTip;
                    SqlConnection myconn = new SqlConnection(connstring);
                    SqlCommand mycomm = new SqlCommand("SP_AssignedWork", myconn);
                    myconn.Open();
                    mycomm.CommandType = CommandType.StoredProcedure;
                    mycomm.Parameters.Add("@LoanID", SqlDbType.VarChar).Value = LoanIds;
                    mycomm.Parameters.Add("@EmpID", SqlDbType.VarChar).Value = DDLSelectEmployee.SelectedValue;
                    mycomm.ExecuteNonQuery();
                    myconn.Close();
                }
            }


        }
    }
void grid1\u RowDataBound(对象发送方,GridRowEventArgs e)
{
如果(e.Row.RowType==GridRowType.DataRow&&GrdCustomerData.RowsInViewState.Count>0)
{
GridDataControlFieldCell=e.Row.Cells[0]作为GridDataControlFieldCell;
复选框chk=cell.FindControl(“Chkselect”)作为复选框;
GridDataControlFieldCell cellInViewState=GrdCustomerData.RowsInViewState[e.Row.RowIndex]。单元格[0]作为GridDataControlFieldCell;
复选框chkInViewState=cellInViewState.FindControl(“Chkselect”)作为复选框;
if(cell.Value==chkInViewState.ToolTip)
{
chk.Checked=chkInViewState.Checked;
}
}
}
受保护的无效BTNASignWork\u单击(对象发送者,事件参数e)
{
字符串LoanIds=“”;
对于(int i=0;i
Hi…我编辑了我的答案你能检查一下吗..我在这一行出错..“if(chkGrid.Checked==true)”表示对象引用未设置为object@Anil:我还编辑了我的答案,你看到了吗?除此之外,我不能告诉你更多,因为你还没有显示aspx标记,但是按钮单击处理程序中的行循环与LINQ查询是冗余的(
allid
已经包含所有选定的ID).geting相同的错误对象引用未设置为对象的实例我获得了控件evry现在一切正常…但在插入时它会获取所有id..其中它必须获取仅选中列的id…您应该编辑原始问题,并在其中添加到目前为止的内容。您使用了什么代码?我的LINQ查询是否按预期工作?它应该只列出属于选中行的所有id。我得到了控制evry现在一切都好了…但在插入时,它会获取所有id..其中它必须获取仅选中列的id。这是一个答案还是一个加法
    void grid1_RowDataBound(object sender, GridRowEventArgs e)
{
    if (e.Row.RowType == GridRowType.DataRow && GrdCustomerData.RowsInViewState.Count > 0)
    {
        GridDataControlFieldCell cell = e.Row.Cells[0] as GridDataControlFieldCell;
        CheckBox chk = cell.FindControl("Chkselect") as CheckBox;

        GridDataControlFieldCell cellInViewState = GrdCustomerData.RowsInViewState[e.Row.RowIndex].Cells[0] as GridDataControlFieldCell;
        CheckBox chkInViewState = cellInViewState.FindControl("Chkselect") as CheckBox;

        if (cell.Value == chkInViewState.ToolTip)
        {
            chk.Checked = chkInViewState.Checked;
        }
    }
}

protected void BtnAssignWork_Click(object sender, EventArgs e)
{
    string LoanIds = "";

    for (int i = 0; i < GrdCustomerData.RowsInViewState.Count; i++)
    {
        GridDataControlFieldCell cell = GrdCustomerData.RowsInViewState[i].Cells[0] as GridDataControlFieldCell;
        CheckBox chk = cell.FindControl("Chkselect") as CheckBox;

        if (chk.Checked == true)
        {
            if (!string.IsNullOrEmpty(LoanIds))
               LoanIds += "";

           LoanIds = chk.ToolTip;
                    SqlConnection myconn = new SqlConnection(connstring);
                    SqlCommand mycomm = new SqlCommand("SP_AssignedWork", myconn);
                    myconn.Open();
                    mycomm.CommandType = CommandType.StoredProcedure;
                    mycomm.Parameters.Add("@LoanID", SqlDbType.VarChar).Value = LoanIds;
                    mycomm.Parameters.Add("@EmpID", SqlDbType.VarChar).Value = DDLSelectEmployee.SelectedValue;
                    mycomm.ExecuteNonQuery();
                    myconn.Close();
                }
            }


        }
    }