如何以编程方式设置ASP.NET Web窗体下拉列表selecteditem和selectedindex

时间:2018-04-10 21:02:18

标签: c# asp.net webforms

我看过很多关于这个主题的帖子,答案几乎是一样的。要以编程方式设置selecteditem,请使用以下代码:

DropDownList1.DataBind(); // get the data into the list you can set it
DropDownList1.Items.FindByValue("SOMECREDITPROBLEMS").Selected = true;

我的情景略有不同。我试图在gridview中设置下拉列表的值。

我可以填充下拉列表,但无法设置selecteditem或selectedindex。

的GridView

<asp:GridView ID="gvSubject" runat="server"
    CssClass="table table-striped clientTblEnabled"
    OnRowDataBound="gvSubject_RowDataBound"
    AutoGenerateColumns="false" 
    OnPreRender="gvSubject_PreRender" 
    GridLines="Both" PageSize="50">
       <Columns>
           <asp:TemplateField HeaderText="Subject Date">
               <ItemTemplate>
                    <asp:Label ID="lblSubjectDate" runat="server" Text='<%# Bind("SubjectDateTime", "{0:MM/dd/yyyy}") %>'></asp:Label>
               </ItemTemplate>
           </asp:TemplateField>
           <asp:TemplateField HeaderText="Subject">
               <ItemTemplate>
                    <asp:Label ID="lblSubject" runat="server" Text='<%# Bind("SubjectDesc") %>' Visible="false"></asp:Label>
                    <asp:DropDownList ID="ddlSubject" runat="server" CssClass="input-xlarge controls"></asp:DropDownList>
               </ItemTemplate>
           </asp:TemplateField>
        </Columns>
        <EmptyDataTemplate>
             No Results found
        </EmptyDataTemplate>
</asp:GridView>

填充下拉列表

protected void gvSubject_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
                DropDownList ddlSubject = e.Row.FindControl("ddlSubject") as DropDownList;


                if (ddlSubject != null)
                {
                    DataSet ds = GetControlData("ddlSubject");
                    ddlSubject.DataSource = ds.Tables[8];
                    ddlSubject.DataTextField = "SubjectDesc";
                    ddlSubject.DataValueField = "SubjectID";
                    ddlSubject.DataBind();
                    ddlSubject.Items.FindByValue((e.Row.FindControl("lblSubject") as Label).Text).Selected = true;
                }

        }
    }

lblSubject由GetControlData()中的另一个查询填充。

当调试器到达ddlSubject.Items.FindByValue代码时,即使lblSubject有值,我也会得到NullReferenceException。

我想知道是否需要更改我加载数据的gridview事件。

1 个答案:

答案 0 :(得分:2)

我认为你在此之后可能是FindByText,而不是FindByValue。该项的值将是SubjectID列,而该项的文本将与标签的文本匹配。