I am updating an order form using the RadGrid nesting feature, but I'm having trouble getting the data from the nested grid and inserting it into a dataset so I can further process the order, inserting it into the database. I keep the "not set to an instance of an object" null reference error. Specifically, when I try to initiate the row count for the data in the nested grid in the codebehind. Here's the relevant aspx code;
And here is the codebehind:
I am hoping a second set of eyes will help me resolve this. Basically, I will eventually take the dataset and creating a new order that will then be inserted into a database.
| <telerik:RadGrid ID="rgPogList" runat="server" DataSourceID="dsListPogs" GridLines="None" AllowPaging="True"> |
| <MasterTableView AutoGenerateColumns="False" DataKeyNames="StoreNum,POGID" DataSourceID="dsListPogs"> |
| <RowIndicatorColumn> |
| <HeaderStyle Width="20px"></HeaderStyle> |
| </RowIndicatorColumn> |
| <ExpandCollapseColumn> |
| <HeaderStyle Width="20px"></HeaderStyle> |
| </ExpandCollapseColumn> |
| <Columns> |
| <telerik:GridBoundColumn DataField="StoreNum" HeaderText="StoreNum" |
| ReadOnly="True" SortExpression="StoreNum" UniqueName="StoreNum" Visible="false"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="RetailerID" DataType="System.Int32" |
| HeaderText="RetailerID" SortExpression="RetailerID" UniqueName="RetailerID" Visible="false"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="POGID" HeaderText="POGID" ReadOnly="True" |
| SortExpression="POGID" UniqueName="POGID"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="Description" HeaderText="Description" |
| SortExpression="Description" UniqueName="Description"> |
| </telerik:GridBoundColumn> |
| </Columns> |
| <NestedViewSettings DataSourceID="SqlDataSource2"> |
| <ParentTableRelation> |
| <telerik:GridRelationFields MasterKeyField="POGID" DetailKeyField="POGID" /> |
| </ParentTableRelation> |
| </NestedViewSettings> |
| <NestedViewTemplate> |
| <asp:GridView ID="rgOrderDetail" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource2" |
| Width="100%" Font-Size="Small" ForeColor="Black"> |
| <Columns> |
| <asp:TemplateField HeaderText="RowNum" SortExpression="RowNum"> |
| <EditItemTemplate> |
| <asp:TextBox ID="txtRowNum" runat="server" Text='<%# Bind("RowNum") %>'></asp:TextBox> |
| </EditItemTemplate> |
| <ItemTemplate> |
| <asp:Label ID="lblRowNum" runat="server" Text='<%# Bind("RowNum") %>'></asp:Label> |
| </ItemTemplate> |
| <ItemStyle Font-Bold="False" /> |
| </asp:TemplateField> |
| <asp:TemplateField HeaderText="LineNum" SortExpression="LineNum"> |
| <EditItemTemplate> |
| <asp:TextBox ID="txtLineNum" runat="server" Text='<%# Bind("LineNum") %>'></asp:TextBox> |
| </EditItemTemplate> |
| <ItemTemplate> |
| <asp:Label ID="lblLineNum" runat="server" Text='<%# Bind("LineNum") %>'></asp:Label> |
| </ItemTemplate> |
| <ItemStyle Font-Bold="False" /> |
| </asp:TemplateField> |
| <asp:TemplateField HeaderText="ItemNum" SortExpression="ItemNum"> |
| <EditItemTemplate> |
| <asp:TextBox ID="txtItemNum" runat="server" Text='<%# Bind("ItemNum") %>'></asp:TextBox> |
| </EditItemTemplate> |
| <ItemTemplate> |
| <asp:Label ID="lblItemNum" runat="server" Text='<%# Bind("ItemNum") %>'></asp:Label> |
| </ItemTemplate> |
| <ItemStyle Font-Bold="False" /> |
| </asp:TemplateField> |
| <asp:TemplateField HeaderText="UPC" SortExpression="UPC"> |
| <EditItemTemplate> |
| <asp:TextBox ID="txtUPC" runat="server" Text='<%# Bind("UPC") %>'></asp:TextBox> |
| </EditItemTemplate> |
| <ItemTemplate> |
| <asp:Label ID="lblUPC" runat="server" Text='<%# Bind("UPC") %>'></asp:Label> |
| </ItemTemplate> |
| <ItemStyle Font-Bold="False" /> |
| </asp:TemplateField> |
| <asp:TemplateField HeaderText="Par" SortExpression="Par"> |
| <EditItemTemplate> |
| <asp:TextBox ID="txtPar" runat="server" Text='<%# Bind("Par") %>'></asp:TextBox> |
| </EditItemTemplate> |
| <ItemTemplate> |
| <asp:Label ID="lblPar" runat="server" Text='<%# Bind("Par") %>'></asp:Label> |
| </ItemTemplate> |
| <ItemStyle Font-Bold="False" /> |
| </asp:TemplateField> |
| <asp:TemplateField HeaderText="ItemDesc" SortExpression="ItemDesc"> |
| <EditItemTemplate> |
| <asp:TextBox ID="txtItemDesc" runat="server" Text='<%# Bind("ItemDesc") %>'></asp:TextBox> |
| </EditItemTemplate> |
| <ItemTemplate> |
| <asp:Label ID="lblItemDesc" runat="server" Text='<%# Bind("ItemDesc") %>'></asp:Label> |
| </ItemTemplate> |
| <ItemStyle Font-Bold="False" /> |
| </asp:TemplateField> |
| <asp:TemplateField HeaderText="Quantity"> |
| <ItemTemplate> |
| <asp:TextBox ID="txtQuantity" runat="server" Width="0.5in">0</asp:TextBox> |
| <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtQuantity" |
| ErrorMessage="Amount can not be blank"> |
| </asp:RequiredFieldValidator> |
| <asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="txtQuantity" |
| ErrorMessage="Amount must be a number" MaximumValue="2000" MinimumValue="0" SetFocusOnError="True" |
| Type="Integer"> |
| </asp:RangeValidator> |
| </ItemTemplate> |
| <ItemStyle Width="3.9in" Wrap="False" /> |
| </asp:TemplateField> |
| </Columns> |
| </asp:GridView><br /><br /> |
| <asp:Button ID="btnClear" runat="server" Text="Clear" /> |
| <asp:Button ID="btnReviewOrder" runat="server" Text="Submit" OnCommand="ReviewOrder" /> |
| </NestedViewTemplate> |
| </MasterTableView> |
| <HierarchySettings ExpandTooltip="Expand to see items in POG" /> |
| </telerik:RadGrid> |
| Private Sub ReviewOrder() |
| 'Dim intRow As Integer |
| Dim Quantity As Integer |
| Dim Row As GridViewRow |
| Dim DS As New DataSet |
| Dim DR As DataRow |
| Dim RowCount As Integer |
| Dim rgOrderDetail As GridView = Me.FindControl("rgOrderDetail") |
| 'Create data set for order form |
| DS.Tables.Add("tblReviewOrder") |
| DS.Tables(0).Columns.Add("RowNum", Type.GetType("System.String")) |
| DS.Tables(0).Columns.Add("LineNum", Type.GetType("System.String")) |
| DS.Tables(0).Columns.Add("ItemNum", Type.GetType("System.String")) |
| DS.Tables(0).Columns.Add("UPC", Type.GetType("System.String")) |
| DS.Tables(0).Columns.Add("Par", Type.GetType("System.Int32")) |
| DS.Tables(0).Columns.Add("ItemDesc", Type.GetType("System.String")) |
| DS.Tables(0).Columns.Add("Quantity", Type.GetType("System.Int32")) |
| DS.Tables(0).Columns.Add("Messages", Type.GetType("System.String")) '??? |
| 'Counts the item rows in the gridview currently open |
| RowCount = rgOrderDetail.Rows.Count - 1 |
| Dim blnChecked As Boolean = False '???? |
| 'Populates the data set from the order created |
| For intRow = 0 To RowCount |
| Row = rgOrderDetail.Rows(intRow) |
| Quantity = DirectCast(Row.FindControl("txtQuantity"), TextBox).Text().Trim() |
| If Quantity > 0 Then |
| DR = DS.Tables(0).NewRow() |
| DR("RowNum") = CType(rgOrderDetail.Rows(intRow).FindControl("lblRowNum"), Label).Text |
| DR("LineNum") = CType(rgOrderDetail.Rows(intRow).FindControl("lblLineNum"), Label).Text |
| DR("ItemNum") = CType(rgOrderDetail.Rows(intRow).FindControl("lblItemNum"), Label).Text |
| DR("UPC") = CType(rgOrderDetail.Rows(intRow).FindControl("lblUPC"), Label).Text |
| DR("Par") = CType(rgOrderDetail.Rows(intRow).FindControl("lblPar"), Label).Text |
| DR("ItemDesc") = CType(rgOrderDetail.Rows(intRow).FindControl("lblItemDesc"), Label).Text |
| DR("Quantity") = CType(rgOrderDetail.Rows(intRow).FindControl("txtQuantity"), TextBox).Text().Trim() |
| If CType(rgOrderDetail.Rows(intRow).FindControl("txtQuantity"), TextBox).Text().Trim() > (CType(rgOrderDetail.Rows(intRow).FindControl("lblPar"), Label).Text) Then |
| DR("Messages") = "Quantity entered is greater than the Par amount." |
| Else |
| DR("Messages") = "" |
| End If |
| DS.Tables(0).Rows.Add(DR) |
| End If |
| Next |
| rgReview.DataSource = (DS) |
| rgReview.DataBind() |
| If RowCount > 0 Then |
| OrderPanel.Visible = False |
| ReviewPanel.Visible = True |
| Else |
| OrderPanel.Visible = True |
| ReviewPanel.Visible = False |
| End If |
| End Sub |