如何在gridview编辑上绑定静态下拉列表

时间:2015-05-12 11:38:23

标签: c# asp.net aspxgridview

我想将一个静态的dorpdownlist放到GridView的EditItemTemplate中。

<EditItemTemplate>
  <%--<asp:TextBox ID="txtSuppstatus" Width="40px" runat="server" Text='<%#Eval("Suppstatus") %>' />--%>     
    <asp:DropDownList ID="ddlSuppstatus" AutoPostBack="true" runat="server" SelectedValue='<%#Eval("Suppstatus") %>'>
         <asp:ListItem Text="YES" Value="Y"></asp:ListItem>
         <asp:ListItem Text="NO" Value="N"></asp:ListItem>
   </asp:DropDownList>
</EditItemTemplate> 

当页面加载YES或NO时,选项将显示为文本,但是当用户编辑行时单击编辑它将显示带有YES和NO选项的dorpdownlist。

Dropdownlist在编辑时绑定,但我在编辑时丢失了所有数据。

我已经完成了这个link但遇到了同样的问题。其余所有控件都变为空白,dropdownlist与YES和No选项绑定。

页面加载

enter image description here

编辑后

enter image description here

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:2)

初始显示需要ItemTemplate字段,下拉列表需要单独EditItemTemplate

<asp:TemplateField>
    <ItemTemplate>
            <asp:Label ID="Label1" runat="server" Text='<%#Eval("Suppstatus") %>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
            <asp:DropDownList runat="server" SelectedValue='<%#Eval("Suppstatus") %>'>
                <asp:ListItem Text="YES" Value="Y"></asp:ListItem>
                <asp:ListItem Text="NO" Value="N"></asp:ListItem>
            </asp:DropDownList>
    </EditItemTemplate>
</asp:TemplateField>

答案 1 :(得分:0)

以下是工作代码:

添加了OnRowDataBound:

    protected void grvSupplierStatus_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        try
        {
            if (e.Row.RowType == DataControlRowType.DataRow && grvSupplierStatus.EditIndex == e.Row.RowIndex)
            {
                DropDownList ddlSupStatus = (DropDownList)e.Row.FindControl("ddlSupstatus");
                Label lblsuppstatus = (Label)e.Row.FindControl("lblsuppStatus");                    
                DataSet ds = new DataSet();
                ds = GetYesNoValue("suppStatus");
                DataTable dt = new DataTable();
                dt = ds.Tables[0];
                ddlSupStatus .DataSource = dt;
                ddlSupStatus .DataTextField = "suppStatus";
                ddlSupStatus .DataValueField = "suppStatus";
                ddlSupStatus .DataBind();
                ddlSupStatus.Items.FindByValue(lblsuppstatus.Text).Selected = true;

            }

        }
        catch (Exception ex)
        {                
        }

    }  

添加了通用方法

    public DataSet GetYesNoValue(string ColumnName)
    {
        DataTable dtVal = new DataTable();
        DataColumn column;
        DataRow row;

        column = new DataColumn();
        column.DataType = System.Type.GetType("System.String");
        column.ColumnName = ColumnName;
        dtVal.Columns.Add(column);

        DataSet dsVal = new DataSet();

        dtVal.Rows.Add("--Select--");
        dtVal.Rows.Add("Yes");
        dtVal.Rows.Add("No");

        dsVal.Tables.Add(dtVal);

        return dsVal;
    }

在EditItemTemplate

中添加了标签和下拉列表
<asp:Label Text='<%#Eval("Suppstatus") %>' Visible="false" ID="lblsuppStatus" runat="server" />
<asp:DropDownList runat="server" ID="ddlSupStatus"> </asp:DropDownList>

答案 2 :(得分:0)

每当需要将数据发送回数据库/服务器时(例如出于更新目的),您需要使用Bind()方法而不是Eval()方法。

Bind()方法将数据发送回数据源控件,而Eval()方法只读取数据。

<EditItemTemplate>
  <%--<asp:TextBox ID="txtSuppstatus" Width="40px" runat="server"
      Text='<%#Bind("Suppstatus") %>' />--%>     
    <asp:DropDownList ID="ddlSuppstatus" AutoPostBack="true" 
         runat="server" SelectedValue='<%#Bind("Suppstatus") %>'>
         <asp:ListItem Text="YES" Value="Y"></asp:ListItem>
         <asp:ListItem Text="NO" Value="N"></asp:ListItem>
   </asp:DropDownList>
</EditItemTemplate>

在GridView,DetailsView等中使用Bind控制模板,例如:EditItemTemplateInsertItemTemplate,使控件能够将修改后的值传递给数据源控件。

数据源控件为数据库执行适当的Update / Insert命令。因此,Bind函数在数据绑定控件的EditItemTemplateInsertItemTemplate内使用。

阅读MSDN explanation here.

相关问题