繁体   English   中英

Telerik Radgrid rebind()抛出未将对象引用设置为对象错误的实例

[英]Telerik radgrid rebind() throws Object reference not set to instance of object error

我在单个页面上有两个rad Grid视图。 当我从左侧网格删除项目时,应将其添加到右侧网格,反之亦然。 我正在使用rad ajax管理器。 请看下面的代码。

<telerik:RadGrid runat="server" ID="grdAvailableIOptions" OnNeedDataSource="grdAvailableIOptions_NeedDataSource"
        AllowPaging="false" Width="500px" OnRowDrop="grdAvailableIOptions_RowDrop" AllowMultiRowSelection="true" RetainExpandStateOnRebind="true"
        PageSize="30" AutoGenerateColumns="false" OnItemCreated="grdAvailableIOptions_ItemCreated" OnItemCommand="grdAvailableIOptions_ItemCommand">
        <MasterTableView DataKeyNames="ID" Width="100%" TableLayout="Fixed" ShowHeader="false" GroupsDefaultExpanded="false">
            <GroupByExpressions>
                <telerik:GridGroupByExpression>
                    <SelectFields>
                        <telerik:GridGroupByField FieldAlias="-" FieldName="GroupName"></telerik:GridGroupByField>
                    </SelectFields>
                    <GroupByFields>
                        <telerik:GridGroupByField FieldName="SortOrder"></telerik:GridGroupByField>
                    </GroupByFields>
                </telerik:GridGroupByExpression>
            </GroupByExpressions>

            <Columns>
                <telerik:GridDragDropColumn HeaderStyle-Width="18px" Visible="false">
                </telerik:GridDragDropColumn>
                <telerik:GridBoundColumn DataField="Name" DataType="System.String" HeaderText="Name"
                    SortExpression="Name" UniqueName="Name">
                </telerik:GridBoundColumn>

                <telerik:GridBoundColumn DataField="Price" DataType="System.String" HeaderText="Price" HeaderStyle-HorizontalAlign="Right"
                    SortExpression="Price" UniqueName="Price" DataFormatString="{0:c}" ItemStyle-HorizontalAlign="Right">
                </telerik:GridBoundColumn>
                <telerik:GridTemplateColumn HeaderText="Delete" AllowFiltering="false" ItemStyle-HorizontalAlign="Center">
                    <ItemTemplate>
                        <asp:ImageButton ID="lnkAddItem" ToolTip="Add Machine Item" ImageUrl="~/Content/Images/Add New.png" CommandName="AddItem" CommandArgument=' <%# Eval("ID") %>' runat="server"></asp:ImageButton>
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
            </Columns>
        </MasterTableView>
        <ClientSettings AllowRowsDragDrop="True">
            <Selecting AllowRowSelect="True" EnableDragToSelectRows="false"></Selecting>
            <ClientEvents OnRowDropping="onRowDropping"></ClientEvents>
        </ClientSettings>

    </telerik:RadGrid>

<telerik:RadGrid runat="server" AllowPaging="false" ID="grdSelectedOptions" OnNeedDataSource="grdSelectedOptions_NeedDataSource"
        Width="550px" AllowMultiRowSelection="true" AutoGenerateColumns="false"
        OnItemDataBound="grdSelectedOptions_ItemDataBound" OnItemCommand="grdSelectedOptions_ItemCommand" OnItemCreated="grdSelectedOptions_ItemCreated">
        <MasterTableView DataKeyNames="ID" Width="100%" ShowHeader="false">
            <GroupByExpressions>
                <telerik:GridGroupByExpression>
                    <SelectFields>
                        <telerik:GridGroupByField FieldAlias="-" FieldName="GroupName"></telerik:GridGroupByField>
                    </SelectFields>
                    <GroupByFields>
                        <telerik:GridGroupByField FieldName="SortOrder"></telerik:GridGroupByField>
                    </GroupByFields>
                </telerik:GridGroupByExpression>
            </GroupByExpressions>
            <SortExpressions>
                <telerik:GridSortExpression FieldName="SortOrder" SortOrder="Ascending" />
            </SortExpressions>
            <Columns>
                <telerik:GridDragDropColumn HeaderStyle-Width="18px" Visible="false">
                </telerik:GridDragDropColumn>
                <telerik:GridTemplateColumn HeaderText="Item" UniqueName="MachineItem">
                    <ItemTemplate>
                        <asp:Label runat="server" ID="lblItem" Visible="false"></asp:Label>
                        <telerik:RadComboBox runat="server" ID="RadComboBox1" Width="100%" Visible="false" AutoPostBack="true" OnSelectedIndexChanged="RadComboBox1_SelectedIndexChanged">
                        </telerik:RadComboBox>
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
                <telerik:GridTemplateColumn HeaderText="Quantity" UniqueName="Quantity" Display="false">
                    <ItemTemplate>
                        <asp:TextBox runat="server" ID="txtQuantity" AutoPostBack="true" Width="30px" Text='<%#Eval("Quantity") %>' OnTextChanged="txtQuantity_TextChanged"></asp:TextBox>
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
                <telerik:GridTemplateColumn DataField="Price" HeaderText="Price" HeaderStyle-HorizontalAlign="Right"
                    SortExpression="Price" UniqueName="Price" ItemStyle-HorizontalAlign="Right">
                    <ItemTemplate>
                        <asp:Label runat="server" ID="lblPrice" Text='<%#Eval("Price","{0:c}") %>'></asp:Label>
                        <asp:HiddenField runat="server" ID="hdnPrice" Value='<%#Eval("Price") %>'></asp:HiddenField>
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
                <telerik:GridTemplateColumn HeaderText="Delete" AllowFiltering="false">
                    <ItemTemplate>
                        <asp:ImageButton ID="lnkDelete" Visible="false" ToolTip="Delete Machine Item" ImageUrl="~/Common/Images/del.gif" CommandName="Delete" CommandArgument=' <%# Eval("ID") %>' runat="server" OnClientClick="javascript:if (!confirm('Are you sure you want to delete Machine Item ?')) {
                                         return false;
                                     }"></asp:ImageButton>
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
            </Columns>
            <NoRecordsTemplate>
                <div style="height: 30px; cursor: pointer;">
                    No items to view
                </div>
            </NoRecordsTemplate>

        </MasterTableView>
        <ClientSettings AllowRowsDragDrop="True">
            <Selecting AllowRowSelect="True" EnableDragToSelectRows="false"></Selecting>
            <ClientEvents OnRowDropping="onRowDropping"></ClientEvents>
        </ClientSettings>
    </telerik:RadGrid>

这是rad ajax经理

<telerik:AjaxSetting AjaxControlID="grdAvailableIOptions">
        <UpdatedControls>
            <telerik:AjaxUpdatedControl ControlID="grdAvailableIOptions"></telerik:AjaxUpdatedControl>
            <telerik:AjaxUpdatedControl ControlID="grdSelectedOptions"></telerik:AjaxUpdatedControl>
            <telerik:AjaxUpdatedControl ControlID="msg"></telerik:AjaxUpdatedControl>
            <telerik:AjaxUpdatedControl ControlID="lblEstimateTotal"></telerik:AjaxUpdatedControl>
            <telerik:AjaxUpdatedControl ControlID="lblConfirmationText"></telerik:AjaxUpdatedControl>
            <telerik:AjaxUpdatedControl ControlID="modalPopup"></telerik:AjaxUpdatedControl>
        </UpdatedControls>
    </telerik:AjaxSetting>
    <telerik:AjaxSetting AjaxControlID="grdSelectedOptions">
        <UpdatedControls>
            <telerik:AjaxUpdatedControl ControlID="grdSelectedOptions"></telerik:AjaxUpdatedControl>
            <telerik:AjaxUpdatedControl ControlID="grdAvailableIOptions"></telerik:AjaxUpdatedControl>
            <telerik:AjaxUpdatedControl ControlID="msg"></telerik:AjaxUpdatedControl>
            <telerik:AjaxUpdatedControl ControlID="lblEstimateTotal"></telerik:AjaxUpdatedControl>
            <telerik:AjaxUpdatedControl ControlID="lblConfirmationText"></telerik:AjaxUpdatedControl>
            <telerik:AjaxUpdatedControl ControlID="modalPopup"></telerik:AjaxUpdatedControl>
        </UpdatedControls>
    </telerik:AjaxSetting>

这是我收到此错误的背后的代码

 protected void grdAvailableIOptions_ItemCommand(object sender, GridCommandEventArgs e)
    {
        if (e.CommandName == "AddItem")
        {
            try
            {
                int ID = Convert.ToInt32(e.CommandArgument.ToString());

                MachineItems tmpMachineItems = GetMachineItem(AvailableIOptionsList, ID);

                if (itemRules.Any(i => i.MachineItemID == ID))
                {
                    btnConfirm.CommandArgument = ID.ToString();
                    lblConfirmationText.InnerHtml = identifyRules(tmpMachineItems);

                    // When there is a rule of allowed subgroups then this text will be empty.
                    // Dont show popup just add the item and make the related items available for selection
                    if (string.IsNullOrEmpty(lblConfirmationText.InnerHtml))
                    {
                        SelectedOptionsList.Add(tmpMachineItems);
                        AvailableIOptionsList.Remove(tmpMachineItems);
                        lblEstimateTotal.Text = (Decimal.Parse(lblEstimateTotal.Text, numberStyle) + tmpMachineItems.Price).ToString("c");
                        CheckForAllowedSubgroups();
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "key", "showRulesModal();", true);
                    }
                }
                else
                {
                    SelectedOptionsList.Add(tmpMachineItems);
                    AvailableIOptionsList.Remove(tmpMachineItems);
                }

                grdSelectedOptions.Rebind();
                grdAvailableIOptions.Rebind();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }        

我在这时遇到错误** grdAvailableIOptions.Rebind(); **。 它正确调用了Need数据源方法,但是在调用了Need数据源方法之后,它立即引发未设置为实例错误的对象引用。

谁能指出我在这里做错了什么?

我也想知道是否可以仅使用ajax管理器来刷新/重新绑定网格,而无需使用radgrid.rebind()方法?

经过大量检查后,我发现有一个空项目被添加到我的数据源中,这导致了此问题。 因此,请始终检查空对象,然后再将它们添加到数据源中。

希望有人发现此信息有用。

暂无
暂无

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

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