C# 无法将ID绑定到使用SQLDataReader生成的表的按钮

C# 无法将ID绑定到使用SQLDataReader生成的表的按钮,c#,asp.net,C#,Asp.net,我一直无法解决这个问题。我使用SqlDataReader将数据库中的数据生成网格视图。我一直在尝试在每一行上生成按钮,我想用它来更新数据库 我无法从表中获取任何要附加到按钮的值。我希望绑定ID,但我尝试的方法都不管用 以下是我的原始数据绑定查询代码: using (SqlConnection con = new SqlConnection(constr)) { con.Open(); SqlCommand cmd = new SqlCommand("SELECT ID, Wid

我一直无法解决这个问题。我使用
SqlDataReader
将数据库中的数据生成网格视图。我一直在尝试在每一行上生成按钮,我想用它来更新数据库

我无法从表中获取任何要附加到按钮的值。我希望绑定ID,但我尝试的方法都不管用

以下是我的原始数据绑定查询代码:

using (SqlConnection con = new SqlConnection(constr))
{
    con.Open();

    SqlCommand cmd = new SqlCommand("SELECT ID, Width, Length, DockID from Slip where ID not in (select slipID from lease) and dockID = @dockId", con);
    cmd.Parameters.AddWithValue("@dockId", dockId);

    SqlDataReader dr = cmd.ExecuteReader();
    gridView.DataSource = dr;
    gridView.DataBind();

    con.Close();
}
这是我试图在每一列上生成按钮的尝试,它可以工作,但是我无法从表中获取任何值来绑定到按钮

foreach (TableRow row in gvAvailableLeaseSlips.Rows)
{
    TableCell btnCell = new TableCell();
    Button btn = new Button();

    btn.Text = "Lease Slip";
    btn.CssClass = "btn";
    btn.Click += new EventHandler(BtnLease_Click);

    btnCell.Controls.Add(btn);

    row.Cells.Add(btnCell);
}

事情不是这样的
GridView
有一个DataKeys属性,该属性应在标记中设置为“ID”。然后在按钮的单击事件处理程序中(根据您的描述,它似乎出现在每一行中),您应该查找相应的
DataRow
,并请求其
DataKey
,它将以您的ID作为对象。

您不能像这样从datareader绑定网格。像这样更改代码

        DataTable dt = new DataTable();
        dt.Columns.Add("dockId");
        dt.Columns.Add("width");
        dt.Columns.Add("length");


        while (obj_Reader.Read())
        {
            DataRow row = dt.NewRow();
            row["dockId"] = obj_Reader["dockId"];
            row["width"] = obj_Reader["width"];
            row["lenght"] = obj_Reader["LName"];
            dt.Rows.Add(row);
        }
        gridView.DataSource = dt;
或者可以使用数据集填充gridview

此外,在gridview中,您可以使用“自动生成编辑”按钮更新值
在gridview属性中添加AutoGnerateEditButton=true

为gridview设置Datakeys属性后,它将是:

int rowIndex = gvAvailableLeaseSlips.RowIndex;
int ID = (int)gvAvailableLeaseSlips.DataKeys[rowIndex]["yourKey"];

注:我在ASP.NET上工作已经很多年了,具体细节可能略有不同,但过程应该和我写的一样。这对我帮助很大。谢谢你。