2

我有一个用于更新数据库的 gridview。网格视图由三列组成。第一列是 ID 号。第二列是类别 (BU)。最后一列是评论字段。我设置了编辑以允许编辑第二列和第三列。第二列需要有一个下拉列表供用户选择。到目前为止,我做得很好。我的客户为此添加了另一个组,因此需要修改填充下拉列表的查询以查找客户是客户 A 还是客户 B。我将下拉列表基于数据库中的视图。该视图有两列 Cust, BU。我可以从填充 gridview 的原始查询中得到 cust。我试图将其设置为 DataKey,但我不确定如何引用它。

这是gridview中下拉列表的代码。该对象使用 onrowdatabound = "Rowdatabound" 绑定到网格视图

这是后面的rowdatabound代码:

protected void RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow && gvSummary.EditIndex == e.Row.RowIndex)
    {

        DropDownList dlBU = (DropDownList)e.Row.FindControl("dlBU");

        string query = "select distinct Unit from vw_BU";
        SqlCommand cmd = new SqlCommand(query);
        dlBU.DataSource = GetData(cmd);
        dlBU.DataTextField = "Unit";
        dlBU.DataValueField = "Unit";
        dlBU.DataBind();
        dlBU.Items.FindByValue((e.Row.FindControl("lblBU") as Label).Text).Selected = true;
    }
}

lblBU 使得下拉列表将保留原始值(如果有)。我为每个客户在数据库中添加了一个空值,这样如果没有输入值,我就可以避免错误。

所以最终我想要做的是从 vw_BU 中选择不同的单元,其中 cust = "Tim",我会从原始选择语句中的数据键中获取 Tim。

我希望这是有道理的。

4

1 回答 1

2

注意:GridView.EditIndexOnRowCommand的值始终为 -1,因此签入gvSummary.EditIndex==e.Row.RowIndex永远不会是true

您应该将代码放在OnRowEditing您的 gridview 事件中,而不是 OnRowCommand。首先设置DataKeyNamesgridview 的属性。

<asp:GridView ID="gvSummary" DataKeyNames="Cust" ... />

在您的OnRowEditing事件中,您可以访问Cust要编辑的行的此值。

<asp:GridView ID="gvSummary" DataKeyNames="Cust" 
     OnRowEditing="gvSummary_RowEditing"  ... />

// 你的代码后面会有..

protected void gvSummary_RowEditing(object sender, GridViewEditEventArgs e)
{

        // Get the Cust column value 
        string _custName= gvSummary.DataKeys[e.NewEditIndex].Value.ToString();
        // get the value without using DataKeys as:
        string _custName2= gvSummary.Rows[e.NewEditIndex].Cells[2].Text;
       // frame your query now::
       string query = "select distinct Unit from vw_BU where Cust='"+_custName+"'"; 

       // rest of your code to bind dropdownlist  

}

编辑:: 如果您将多个列设置为 DataKeys,则可以按以下方式访问这些值:

 // using Names
    string str = gvSummary.DataKeys[e.NewEditIndex].Values["Cust"].ToString();
    // using index
    string str = gvSummary.DataKeys[e.NewEditIndex].Values[2].ToString();
于 2013-09-03T15:44:54.310 回答