繁体   English   中英

如何在button_click事件中创建下拉列表对象的实例

[英]How to make an instance of dropdown list object in a button_click event

有人请告诉我为什么单击button1时会出现此错误

异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。

问题出在下拉列表上。 如何在button1_ click事件中创建它们的实例?

 protected void Button1_Click(object sender, EventArgs e)
{
    string day = String.Empty;

    string time = String.Empty;

    string moduleId = string.Empty;
    string moduleName = string.Empty;

    DataTable dt = new DataTable();

    dt.Columns.Add("ModuleID");
    dt.Columns.Add("ModuleName");
    dt.Columns.Add("Day");
    dt.Columns.Add("Time");


    foreach (GridViewRow row in GridView1.Rows)
    {
        DropDownList ddl_day = new DropDownList(); // wont work, I tried it!

        day = ((DropDownList)row.FindControl("ddl_day")).SelectedItem.Value;

        time = ((DropDownList)row.FindControl("ddl_time")).SelectedItem.Value;


        DataRow dr = dt.NewRow();


       // dr[0] = row.Cells[i].Text;
      /*  dr["ModuleID"] = moduleId;
        dr["ModuleName"] = moduleName;*/
        dr["Day"] = day;
        dr["Time"] = time;

        dt.Rows.Add(dr);

    }




    DataSet ds = new DataSet();
    ds.DataSetName = "Student_module_data";
    ds.Tables.Add(dt);
    ds.WriteXml(@"E:\OBJECT ORIENTED DEV'T\xml_data\testing.xml");
}

这是我的html

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" OnRowDataBound="OnRowDataBound">
               <Columns>

                    <asp:TemplateField HeaderText="Day">
                    <ItemTemplate>
                    <asp:DropDownList ID="ddl_days" runat="server">
                    </asp:DropDownList>
                    </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Time">
                    <ItemTemplate>
                    <asp:DropDownList ID="ddl_time" runat="server">
                    </asp:DropDownList>
                    </ItemTemplate>
                    </asp:TemplateField>
                    <asp:CommandField HeaderText="Select" ShowSelectButton="True" />
                    </Columns>
                    <FooterStyle BackColor="White" ForeColor="#000066" />
                    <RowStyle ForeColor="#000066" />
                    <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
                    <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
                    <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
                </asp:GridView>

看起来像下面的行返回null

  ((DropDownList)row.FindControl("ddl_day"));

并且,当您尝试使用其属性时,它给出了空引用错误。 因此,请检查它是否为null。

   var ddl_day = ((DropDownList)row.FindControl("ddl_day"));
   if(ddl_day!=null)
   {
      day = ddl_day.SelectedItem.Value;
   }  

同时检查其他下拉菜单相同。

正如Zaki在评论中ddl_day ,将HTML代码中的DropdownList ID从ddl_days更改为ddl_day 这是主要问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM