c# - FindByName 或 FindByValue set .selected on dropdownlist 返回错误 对象引用未设置到对象的实例

标签 c# asp.net combobox webforms selected

我已经构建了一些绑定(bind)到 linq 数据源的下拉列表。当我在 GridView 上选择一行时,将执行查询,然后应根据查询中的数据设置下拉列表选择。当我这样做时,RegionListBox 工作正常,但是当我尝试使用 .FindByName 设置其他三个列表框的 .Selected 属性时,它们似乎尚未按操作顺序填充。当我注释掉下面代码中的三行“.FindByName”时,代码运行没有问题,但当然没有选择下拉值。当我使用 3 findbyname 行执行代码时,第一行会出错,因为对象引用未设置为对象的实例。 - 在列表的项目集合上设置监视,显示为空

问题是:当区域列表框项目选择已填充时,为什么下拉列表项目集合为空?我应该何时/在哪里设置所选内容以便填充下拉列表项集合?

        protected void ItemGridView_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Page")
            return;

        if (e.CommandName == "EditItem")
        {
            string[] commandArgs = e.CommandArgument.ToString().Split(new char[] { ',' });

            ItemGridView.SelectedIndex = -1;
            ItemGridView.SelectedIndex = int.Parse(commandArgs[1]);
            ServiceListBox.ClearSelection();
            RegionListBox.ClearSelection();

            editPanel.Visible = true;
            //query your database and store the result set in a DataTable 
            DasLinqClassesDataContext db = new DasLinqClassesDataContext();
            var ItemRowSelected = db.GetItemForUserById(Session["CSPAttuid"].ToString(), int.Parse(commandArgs[0])).FirstOrDefault();
            if (ItemRowSelected != null)
            {
                if (ItemRowSelected.region != null)
                {
                    string[] RegionIds;
                    RegionIds = ItemRowSelected.region.Split(',');
                    foreach (string element in RegionIds)
                    {
                        RegionListBox.Items.FindByValue(element.ToString()).Selected = true;
                    }
                }


                fieldTitle.Text = ItemRowSelected.title;
                fieldNewOverview.Text = ItemRowSelected.overview;
                lblPreviewTitle.Text = ItemRowSelected.title;
                lblPreviewAudience.Text = ItemRowSelected.audience;
                lblPreviewRegion.Text = ItemRowSelected.region_name;
                lblPreviewService.Text = ItemRowSelected.service;
                lblPreviewOverview.Text = ItemRowSelected.overview;
                lblPreviewDocument.Text = ItemRowSelected.doc;
                lblPreviewAuthor.Text = ItemRowSelected.author_name;
                //urgent checkbox / image
                if (ItemRowSelected.urgent == true)
                {
                    urgentEditImage.Visible = true;
                    checkUrgent.Checked = true;
                    urgentViewImage.Visible = true;
                }
                else
                {
                    urgentEditImage.Visible = false;
                    checkUrgent.Checked = false;
                    urgentViewImage.Visible = false;
                }
                //audio hyperlink/image
                if (ItemRowSelected.audio != null)
                {
                    audioEditImage.Visible = true;
                    audioViewImage.Visible = true;
                    fieldAudio.Text = ItemRowSelected.audio.ToString();
                }
                else
                {
                    audioEditImage.Visible = false;
                    audioViewImage.Visible = false;
                    fieldAudio.Text = "";
                }
                //document
                if (ItemRowSelected.doc != null)
                {
                    fieldDocument.Text = ItemRowSelected.doc;
                    fieldDocLink.Text = ItemRowSelected.link;
                }
                //service
                if(ItemRowSelected.service != null)
                {
                    ServiceListBox.Items.FindByText(ItemRowSelected.service.ToString()).Selected = true;
                }
                //audience
                if (ItemRowSelected.audience != null)
                {
                    ServiceListBox.Items.FindByText(ItemRowSelected.audience.ToString()).Selected = true;
                }
                //author
                if (ItemRowSelected.author != null)
                {
                    ServiceListBox.Items.FindByText(ItemRowSelected.author.ToString()).Selected = true;
                }
            }
            hiddenId.Value = ItemRowSelected.id.ToString();

        }
    }

以下是下拉列表的一些页面代码:

.....d>
                <td width=707 colspan=2 valign=top style='width:530.25pt;border:none;border-right:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
                <p class=MsoNormal>
                <b>
                    <asp:DropDownList ID="ServiceListBox" runat="server" 
                        DataSourceID="LinqDsService" DataTextField="name" DataValueField="id">
                    </asp:DropDownList><asp:ImageButton ID="AddNewServiceToDropdown" runat="server" 
                        CausesValidation="False" ImageUrl="~/images/addButton.png" />
                    <asp:ModalPopupExtender ID="ModalPopAddNewServiceToDropdown" runat="server" 
                        BackgroundCssClass="modalBackground" CancelControlID="btnCancelService" 
                        DynamicServicePath="" Enabled="True" PopupControlID="panAddService" 
                        TargetControlID="AddNewServiceToDropdown">
                    </asp:ModalPopupExtender>
                </span>
                </b>
                </p>
                </td>
                </tr>
                <tr>
                <td valign=top 
                        style='border-left:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;background:#FF6600;padding:0in 5.4pt 0in 5.4pt; border-top-style: none; border-top-color: inherit; border-top-width: medium; border-bottom-style: none; border-bottom-color: inherit; border-bottom-width: medium;' 
                        class="style2">
                <p class=MsoNormal>
                <span style='font-family:"ClearviewATT","sans-serif"'>
                <o:p>&nbsp;</o:p>
                </span>
                </p>
                </td>
                <td width=193 colspan=2 valign=top style='width:144.55pt;border:none;padding:0in 5.4pt 0in 5.4pt'>
                <p class=MsoNormal>
                <span style='font-size:11.0pt;font-family:"ClearviewATT LT","sans-serif"'>Overview:<o:p>
                </o:p>
                </span>
                </p>
                </td>
                <td width=707 colspan=2 valign=top style='width:530.25pt;border:none;border-right:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
                <p class=MsoNormal 
                        style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; height: 52px; width: 602px;'>
                    <asp:TextBox ID="fieldNewOverview" TextMode="MultiLine" runat="server" 
                        Width="600px"></asp:TextBox>
                </p>
                </td>
                </tr>
                <tr>
                <td valign=top 
                        style='border-left:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;background:#FF6600;padding:0in 5.4pt 0in 5.4pt; border-top-style: none; border-top-color: inherit; border-top-width: medium; border-bottom-style: none; border-bottom-color: inherit; border-bottom-width: medium;' 
                        class="style2">
                <p class=MsoNormal>
                <span style='font-family:"ClearviewATT","sans-serif"'>
                <o:p>&nbsp;</o:p>
                </span>
                </p>
                </td>
                <td width=193 colspan=2 valign=top style='width:144.55pt;border:none;padding:0in 5.4pt 0in 5.4pt'>
                <p class=MsoNormal>
                <span style='font-size:11.0pt;font-family:"ClearviewATT LT","sans-serif"'>WIIFM (What&#8217;s In It For Me):<o:p>
                </o:p>
                </span>
                </p>
                </td>
                <td width=707 colspan=2 valign=top style='width:530.25pt;border:none;border-right:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
                <p class=MsoNormal>
                    <asp:TextBox ID="TextBox1" runat="server" Width="600px"></asp:TextBox>
                </p>
                </td>
                </tr>
                <!--- document number --->
                <tr>
                <td valign=top 
                        style='border-left:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;background:#FF6600;padding:0in 5.4pt 0in 5.4pt; border-top-style: none; border-top-color: inherit; border-top-width: medium; border-bottom-style: none; border-bottom-color: inherit; border-bottom-width: medium;' 
                        class="style2">
                <p class=MsoNormal>
                <span style='font-family:"ClearviewATT","sans-serif"'>
                <o:p>&nbsp;</o:p>
                </span>
                </p>
                </td>
                <td width=193 colspan=2 valign=top style='width:144.55pt;border:none;padding:0in 5.4pt 0in 5.4pt'>
                <p class=MsoNormal>
                <span style='font-size:11.0pt;font-family:"ClearviewATT LT","sans-serif"'>Document Number:<o:p>
                </o:p>
                </span>
                </p>
                </td>
                <td width=707 colspan=2 valign=top style='width:530.25pt;border:none;border-right:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>


                <p class=MsoNormal>
                  <table>
                    <tr>
                        <td><span  style='font-size:11.0pt;font-family:"ClearviewATT LT","sans-serif"'><asp:Label ID="Label3" runat="server" Text="Document Name"></asp:Label></span></td>


                            <td>
                                <asp:TextBox ID="fieldDocument" runat="server" Width="212px"></asp:TextBox>
                            </td>

                </tr>
                <tr>
                    <td><span  style='font-size:11.0pt;font-family:"ClearviewATT LT","sans-serif"'><asp:Label ID="Label4" runat="server" Text="Hyperlink"></asp:Label></span></td>
                    <td><asp:TextBox ID="fieldDocLink" runat="server" Width="485px"></asp:TextBox></td></tr></table>
                </p>
                </td>
                </tr>
                <!--- author --->
                <tr>
                <td valign=top 
                        style='border-left:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;background:#FF6600;padding:0in 5.4pt 0in 5.4pt; border-top-style: none; border-top-color: inherit; border-top-width: medium; border-bottom-style: none; border-bottom-color: inherit; border-bottom-width: medium;' 
                        class="style2">
                <p class=MsoNormal>
                </p>
                </td>
                <td width=193 colspan=2 valign=top style='width:144.55pt;border:none;padding:0in 5.4pt 0in 5.4pt'>
                <p class=MsoNormal>
                <span style='font-size:11.0pt;font-family:"ClearviewATT LT","sans-serif"'>Author:<o:p>
                </o:p>
                </span>
                </p>
                </td>
                <td width=707 colspan=2 valign=top style='width:530.25pt;border:none;border-right:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
                <p class=MsoNormal>
                <asp:DropDownList ID="AuthorListBox" runat="server" DataSourceID="LinqDsAuthor" 
                        DataTextField="name" DataValueField="id">
                    </asp:DropDownList>   etc.....

这里是 linq 数据源的一些页面代码:

 <!---begin linqdatasources--->
<asp:LinqDataSource ID="Region" runat="server" 
    ContextTypeName="das.DasLinqClassesDataContext" EntityTypeName="" 
    Select="new (id, name)" TableName="ref_regions" Where="active == @active">
    <WhereParameters>
        <asp:Parameter DefaultValue="true" Name="active" Type="Boolean" />
    </WhereParameters>
</asp:LinqDataSource>
<asp:LinqDataSource ID="LinqDsService" runat="server" 
    ContextTypeName="das.DasLinqClassesDataContext" EntityTypeName="" 
    Select="new (id, name, active)" TableName="ref_services" 
    Where="active == @active">
    <WhereParameters>
        <asp:Parameter DefaultValue="true" Name="active" Type="Boolean" />
    </WhereParameters>
</asp:LinqDataSource>
<asp:LinqDataSource ID="LinqDsAudience" runat="server" 
    ContextTypeName="das.DasLinqClassesDataContext" EntityTypeName="" 
    Select="new (id, name, type)" TableName="ref_audiences" 
    Where="active == @active">
    <WhereParameters>
        <asp:Parameter DefaultValue="true" Name="active" Type="Boolean" />
    </WhereParameters>
</asp:LinqDataSource>
<br />
<asp:LinqDataSource ID="LinqDsAuthor" runat="server" 
    ContextTypeName="das.DasLinqClassesDataContext" EntityTypeName="" 
    Select="new (id, name)" TableName="ref_authors" Where="active == @active">
    <WhereParameters>
        <asp:Parameter DefaultValue="true" Name="active" Type="Boolean" />
    </WhereParameters>
</asp:LinqDataSource>
<!---end linqdatasources--->

最佳答案

用途:

ServiceListBox.SelectedIndex = ServiceListBox.Items.IndexOf(ServiceListBox.Items.FindByText(ItemRowSelected.service.ToString()));

而不是

ServiceListBox.Items.FindByText(ItemRowSelected.service.ToString()).Selected = true;

不知道为什么,但现在使用上面的新代码可以正常工作

关于c# - FindByName 或 FindByValue set .selected on dropdownlist 返回错误 对象引用未设置到对象的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11587312/

相关文章:

c# - 如何取消 ComboBox SelectionChanged 事件?

combobox - MFC:如何为所有者绘制呈现 Aero 风格的组合框?

java - 单独的代码层来处理 C#/Java 中的事件

c# - ASP.NET MVC5 中的密码恢复

c# - 如何从 HttpresponseMessage Asp.net Web Api 返回不记名 token

c# - 在 Python 中压缩并使用解压缩 C# 解压缩的最简单方法(反之亦然)

asp.net - 如何使用自定义格式化程序进行 json 序列化

具有相同名称的 Controller 的 asp.net Web api 路由

c# - 不同角色的表单例份验证?

c# - 聚焦时如何自动打开组合框?