asp.net - 基于表单参数过滤gridview中的下拉列表

标签 asp.net aspxgridview

我有一个 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/

相关文章:

asp.net - Request.Form ["name"] 什么时候为空,什么时候为空字符串?

aspxgridview - 在 ASPxGridView 中添加新行时预填充值

vb.net - 有条件地隐藏GridViewCommandColumn中的DeleteButton

asp.net - ASPXGridView 自定义回调

javascript - 找不到动态 asp :Control inside a Gridview using JQuery

asp.net - HTML5 要求在表单上的所有按钮上触发验证

c# - 如何将 Web 用户控件放入工具箱?

c# - 创建拉伸(stretch) Canvas View 的方法

asp.net - 在 asp.net 中包含网格时未设置最大高度

c# - 如何从 SQL 数据库填充 C# 中的通用对象列表