Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式设置ASP.NET Web窗体下拉列表selecteditem和selectedindex_C#_Asp.net_Webforms - Fatal编程技术网

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

C# 如何以编程方式设置ASP.NET Web窗体下拉列表selecteditem和selectedindex,c#,asp.net,webforms,C#,Asp.net,Webforms,我已经看过多篇关于这个主题的帖子,答案基本相同。要以编程方式设置selecteditem,请使用以下代码: DropDownList1.DataBind(); // get the data into the list you can set it DropDownList1.Items.FindByValue("SOMECREDITPROBLEMS").Selected = true; 我的情况略有不同。我试图在gridview中设置dropdownlist的值 我可以填充dropdownl

我已经看过多篇关于这个主题的帖子,答案基本相同。要以编程方式设置selecteditem,请使用以下代码:

DropDownList1.DataBind(); // get the data into the list you can set it
DropDownList1.Items.FindByValue("SOMECREDITPROBLEMS").Selected = true;
我的情况略有不同。我试图在gridview中设置dropdownlist的值

我可以填充dropdownlist,但无法设置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>
lblSubject由GetControlData()中的另一个查询填充

当调试器访问ddlSubject.Items.FindByValue代码时,即使lblSubject有一个值,我也会得到一个NullReferenceException


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

我想您可能想要的是
FindByText
,而不是
FindByValue
。项目的值将是
subject
列,而项目的文本将与标签的文本匹配。

(例如,Row.FindControl(“lblSubject”)作为标签)
为空,还是
FindByValue
的结果?您确定lblSubject的文本值(您说是由另一个查询设置的)确实存在于下拉列表中填充的项列表中吗?@MajorRefactor FindByValue的结果为空。lblSubject确实有一个值,并且值和大小写与ddlSubject中的一个项匹配。我刚刚尝试了FindByText,得到了相同的结果。我想知道我是否需要把它放在另一个事件中。我从OnRowDataBound事件中调用此消息。奇怪。如果您在该行(
ddlSubject.Items.FindByValue((e.Row.FindControl(“lblSubject”)作为Label.Text)上中断并检查标签的Text属性的值,您是否100%确定
ddlSubject.Items
列表中有完全相同的文本(包括大小写)?我知道您在其他评论中提到您已经检查了这一点,但似乎这一定是问题所在-也许items集合实际上尚未填充?这是一个数据完整性问题。dropdownlist中的每个项目都有尾随空格。所以没有比赛。我已经修剪了项目的值,它是有效的。谢谢你的帮助。
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;
                }

        }
    }