代码之家  ›  专栏  ›  技术社区  ›  user1647160

如何以编程方式设置ASP。NET Web表单下拉列表selecteditem和selectedindex

  •  3
  • user1647160  · 技术社区  · 7 年前

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

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

    我的情况略有不同。我试图在gridview中设置dropdownlist的值。

    我可以填充dropdownlist,但无法设置selecteditem或selectedindex。

    网格视图

    <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时。项目。在FindByValue代码中,即使lblSubject有一个值,我也会得到一个NullReferenceException。

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   MajorRefactoring    7 年前

    我想你想要的是 FindByText FindByValue 。项目的值将为 SubjectID 列,而项目的文本将与标签的文本匹配。