C# 如何在单击按钮时保存数据库中项目模板的下拉列表选定值?

C# 如何在单击按钮时保存数据库中项目模板的下拉列表选定值?,c#,asp.net,C#,Asp.net,请找到图片。这是我的全部代码,我想在单击save按钮时保存每一行。我可以从单元格0和单元格1中获取值,但无法从单元格2中获取值,在该单元格中我有下拉列表中的选定值。我获取的是默认值“忽略”,而不是选定项。那个么,我如何获得下拉列表的选定值呢 <div> <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns = "False" OnRowDataBound = "OnRowD

请找到图片。这是我的全部代码,我想在单击save按钮时保存每一行。我可以从单元格0和单元格1中获取值,但无法从单元格2中获取值,在该单元格中我有下拉列表中的选定值。我获取的是默认值“忽略”,而不是选定项。那个么,我如何获得下拉列表的选定值呢

<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"));
    }
}