如何在gridview编辑中绑定静态下拉列表
How to bind static dropdownlist on gridview edit
我想将静态 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>
当页面加载时,“是”或“否”选项将显示为文本,但当用户单击“编辑”编辑行时,它将显示带有“是”和“否”选项的 dorpdownlist。
下拉列表对编辑具有约束力,但我在编辑时丢失了所有数据。
我已经完成了这个 link 但面临同样的问题。剩下的所有控件都变成空白,下拉列表与 YES 和 No 选项绑定。
页面加载时
编辑后
请帮我解决这个问题。
初始显示需要一个 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>
下面是工作代码:
已添加 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>
每当需要将数据发送回 database/server 时,例如出于更新目的,您需要使用 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
,例如:EditItemTemplate
或 InsertItemTemplate
,使控件能够将修改后的值传递给数据源控件。
数据源控件为数据库执行适当的更新/插入命令。因此,Bind
函数用于数据绑定控件的 EditItemTemplate
或 InsertItemTemplate
内部。
我想将静态 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>
当页面加载时,“是”或“否”选项将显示为文本,但当用户单击“编辑”编辑行时,它将显示带有“是”和“否”选项的 dorpdownlist。
下拉列表对编辑具有约束力,但我在编辑时丢失了所有数据。
我已经完成了这个 link 但面临同样的问题。剩下的所有控件都变成空白,下拉列表与 YES 和 No 选项绑定。
页面加载时
编辑后
请帮我解决这个问题。
初始显示需要一个 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>
下面是工作代码:
已添加 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>
每当需要将数据发送回 database/server 时,例如出于更新目的,您需要使用 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
,例如:EditItemTemplate
或 InsertItemTemplate
,使控件能够将修改后的值传递给数据源控件。
数据源控件为数据库执行适当的更新/插入命令。因此,Bind
函数用于数据绑定控件的 EditItemTemplate
或 InsertItemTemplate
内部。