我有一个 gridview,用于更新数据库。 GridView 由三列组成。第一列是 ID 号。第二列是类别 (BU)。最后一栏是评论字段。我已将编辑设置为允许编辑第二列和第三列。第二列需要有一个下拉列表供用户选择。到目前为止我做得很好。我的客户为此添加了另一个组,因此需要修改填充下拉列表的查询,以查找客户是客户 A 还是客户 B。我将下拉列表基于数据库中的 View 。该 View 有两列 Cust、BU。我可以从填充 GridView 的原始查询中获取客户信息。我尝试将其设置为 DataKey 但我不知道如何引用它。
这是 GridView 中下拉列表的代码。使用 onrowdatabound = "Rowdatabound"将对象绑定(bind)到 gridview
这是背后的 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”,并且我将从原始 select 语句中的数据键中获取 Tim。
我希望这是有道理的。
最佳答案
注意:在 OnRowCommand
中检查 GridView.EditIndex
的值始终为 -1,因此检查 gvSummary.EditIndex= =e.Row.RowIndex
永远不会是 true
。
您应该将代码放置在 gridview 的 OnRowEditing
事件中,而不是 OnRowCommand 中。
首先设置 gridview 的 DataKeyNames
属性。
<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
}
编辑:: 如果您将多个列设置为 DataKey,您可以通过以下方式访问这些值:
// using Names
string str = gvSummary.DataKeys[e.NewEditIndex].Values["Cust"].ToString();
// using index
string str = gvSummary.DataKeys[e.NewEditIndex].Values[2].ToString();
关于asp.net - 基于表单参数过滤gridview中的下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18537766/