C# 如何在单击按钮时保存数据库中项目模板的下拉列表选定值?
请找到图片。这是我的全部代码,我想在单击save按钮时保存每一行。我可以从单元格0和单元格1中获取值,但无法从单元格2中获取值,在该单元格中我有下拉列表中的选定值。我获取的是默认值“忽略”,而不是选定项。那个么,我如何获得下拉列表的选定值呢C# 如何在单击按钮时保存数据库中项目模板的下拉列表选定值?,c#,asp.net,C#,Asp.net,请找到图片。这是我的全部代码,我想在单击save按钮时保存每一行。我可以从单元格0和单元格1中获取值,但无法从单元格2中获取值,在该单元格中我有下拉列表中的选定值。我获取的是默认值“忽略”,而不是选定项。那个么,我如何获得下拉列表的选定值呢 <div> <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns = "False" OnRowDataBound = "OnRowD
<div>
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns = "False"
OnRowDataBound = "OnRowDataBound" Width="544px">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" />
<asp:BoundField HeaderText="Name" DataField="Name" />
<asp:TemplateField HeaderText = "Mapping" >
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" style="font-size: medium; font-family: Cambria" Width="300px">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<asp:Button ID="Button2" runat="server" Text="Save"
style="font-size: medium; font-family: Cambria" BorderStyle="Groove"
height="32px" Width="116px" onclick="Save_Click" />
</div>
private void BindGrid()
{
DataTable dt = new DataTable();
connection();
cmd = new SqlCommand("Select top 0 * from F3_BC_Product_Mapping_Data", con);
con.Open();
adapter = new SqlDataAdapter(cmd);
ds = new DataSet();
adapter.Fill(ds, "mytable");
int j = 1;
dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Id", typeof(int)), new DataColumn("Name", typeof(string)) });
foreach (DataColumn column in ds.Tables[0].Columns)
{
dt.Rows.Add(j,column.ColumnName);
j++;
}
GridView2.DataSource = dt;
GridView2.DataBind();
con.Close();
}
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddlMap = (e.Row.FindControl("DropDownList1") as DropDownList);
DataTable dt = new DataTable();
dt = (DataTable)Session["data"];
for (int i = 0; i < dt.Columns.Count; i++)
{
ddlMap.Items.Add(dt.Columns[i].Caption.ToString());
}
ddlMap.Items.Insert(0, new ListItem("Ignore"));
}
}
若您得到的是默认值,那个么您必须看到绑定代码。我认为在绑定和设置下拉列表中的默认值之前,您没有使用
if(!Page.IsPostBack)
。尝试按如下所示更改OnRowDataBound
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow && !Page.IsPostBack)
{
DropDownList ddlMap = (e.Row.FindControl("DropDownList1") as DropDownList);
DataTable dt = new DataTable();
dt = (DataTable)Session["data"];
for (int i = 0; i < dt.Columns.Count; i++)
{
ddlMap.Items.Add(dt.Columns[i].Caption.ToString());
}
ddlMap.Items.Insert(0, new ListItem("Ignore"));
}
}
受保护的void OnRowDataBound(对象发送方,GridViewRowEventArgs e)
{
if(e.Row.RowType==DataControlRowType.DataRow&&!Page.IsPostBack)
{
DropDownList ddlMap=(e.Row.FindControl(“DropDownList1”)作为DropDownList);
DataTable dt=新的DataTable();
dt=(数据表)会话[“数据”];
对于(int i=0;i
您如何调用BindGrid?我的理解是,您应该在页面_Init
中初始化可选值,以便能够从可用选项加载选定值。然而,我已经有一段时间没有使用ASP.Net了……不,我仍然得到了“忽略”的价值。OP将收到一个空引用异常,因为FindControl将找不到任何内容。我相信您可以在行上运行FindControl来查找此行内的控件否problem@Andrei这不会给出null ref异常,因为下拉列表位于单元格内。OP在对这个答案的评论中也看到了同样的情况。受保护的无效页面加载(对象发送者,事件参数e){DataTable dt=new DataTable();dt=(DataTable)会话[“data”];GridView1.DataSource=dt;GridView1.DataBind();BindGrid();}@Imad My Error,点击按钮后,所选值已消失,且存在默认值..即。“忽略”
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow && !Page.IsPostBack)
{
DropDownList ddlMap = (e.Row.FindControl("DropDownList1") as DropDownList);
DataTable dt = new DataTable();
dt = (DataTable)Session["data"];
for (int i = 0; i < dt.Columns.Count; i++)
{
ddlMap.Items.Add(dt.Columns[i].Caption.ToString());
}
ddlMap.Items.Insert(0, new ListItem("Ignore"));
}
}