A
Atif Jalal
I have a datagrid nested in to a datgrid. Each row of the inner
datagrid has a CheckBox. I am trying to select a bunch of rows from th
einner datagrid and click a delete button to delete them, but it doe
not work. I reference the inner datagrid directly by its ID and I get
an error Object reference set to null.
If I select the checkbox against the rows on the outter datagrid and
click a second delete button to delete, it works and deletes the
complete row including the inner datagrid rows correponding to the
outter datagrid row.
The code to delete the inner datagrid row is
Protected Sub btnAccDelete_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnACCDelete.Click
'Walk the grid looking for selected rows
Dim _i As Integer = 0
Dim _j As Integer = 0
Dim cb As CheckBox
Dim dgi As DataGridItem
Dim _AccId As Integer
''Dim da As SqlDataAdapter
For Each dgi In ACCDataGrid.Items
cb = CType(dgi.Cells(0).Controls(1), CheckBox)
Dim tmp As String = cb.ID
If cb.Checked Then
' Determine the key of the selected record ...
_AccId =
CType(LineItemsDataGrid.DataKeys(dgi.ItemIndex), Integer)
'Code to Delete the record goes here
End If
_i += 1
Next
RefreshDataGrid()
End Sub
The HTML Code for the Nested Datagrid is as follows:
<TR>
<TD colSpan="6">
<aspataGrid id="LineItemsDataGrid" Width="100%" runat="server"
AutoGenerateColumns="False" HorizontalAlign="Center"
AllowSorting="True" AlternatingItemStyle-CssClass="GridAlternatingRow">
<AlternatingItemStyle
CssClass="GridAlternatingRow"></AlternatingItemStyle>
<HeaderStyle CssClass="GridColumnHeading"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="Select">
<HeaderStyle CssClass="GridColumnHeading"></HeaderStyle>
<ItemTemplate>
<asp:CheckBox id="CheckBox1" runat="server"
EnableViewState="True"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:HyperLinkColumn
DataNavigateUrlFormatString="JavaScriptopup('LineItem.aspx?LineItemId={0}&Process=1&',
'Add Line Item', '250','1200', '345','345','275', '1');"
DataNavigateUrlField="ProcessLineItemId" DataTextField="Description"
HeaderText="Line Items"></asp:HyperLinkColumn>
<asp:BoundColumn DataField="description" HeaderText="Description">
<HeaderStyle HorizontalAlign="Center"
CssClass="GridColumnHeading"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="unitPrice" HeaderText="Unit Price">
<HeaderStyle HorizontalAlign="Center"
CssClass="GridColumnHeading"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="quantity" HeaderText="Quantity">
<HeaderStyle HorizontalAlign="Center"
CssClass="GridColumnHeading"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="lineItemTotal" HeaderText="Amount">
<HeaderStyle HorizontalAlign="Center"
CssClass="GridColumnHeading"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn HeaderText="Discounted Total">
<HeaderStyle HorizontalAlign="Center"
CssClass="GridColumnHeading"></HeaderStyle>
</asp:BoundColumn>
<asp:TemplateColumn HeaderText="Account Classification">
<ItemTemplate>
<aspataGrid id="ACCDataGrid" Runat="server"
AutoGenerateColumns="False" HorizontalAlign="Center"
AllowSorting="True" AlternatingItemStyle-CssClass="GridAlternatingRow"
DataKeyField="AccCodeId" DataSource='<%#
GetAcc(DataBinder.Eval(Container.DataItem, "ProcessLineItemId"))%>'>
<AlternatingItemStyle
CssClass="GridAlternatingRow"></AlternatingItemStyle>
<HeaderStyle CssClass="GridColumnHeading"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="Select">
<HeaderStyle CssClass="GridColumnHeading"></HeaderStyle>
<ItemTemplate>
<asp:CheckBox id="Checkbox3" runat="server"
EnableViewState="True"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:HyperLinkColumn HeaderText="Account Classification Code"
DataTextField="AccountClassificationCode"
DataNavigateUrlField="AccCodeId"
DataNavigateUrlFormatString="JavaScriptopup('AccountingCode.aspx?AccId={0}&Process=1&','Add
Account Classification Code', '250','1000',
'500','500','275','1');"></asp:HyperLinkColumn>
<asp:BoundColumn DataField="CalculatedAmount"
HeaderText="Amount">
<HeaderStyle HorizontalAlign="Center"
CssClass="GridColumnHeading"></HeaderStyle>
</asp:BoundColumn>
</Columns>
</aspataGrid>
</ItemTemplate>
</asp:TemplateColumn>
<asp:HyperLinkColumn runat="server"
DataNavigateUrlField="ProcessLineItemId"
DataNavigateUrlFormatString="JavaScriptopup('AccountingCode.aspx?LineItemID={0}&Process=1&','Add
Account Classification Code', '250','1000', '500','500','275','1');"
Text="Add New ACC"></asp:HyperLinkColumn>
</Columns>
</aspataGrid></TD>
</TR>
<TR>
<TD align="left"><IMG height="1" src="/images/spc.gif" width="5"
border="0">
<asp:button id="btnLIDelete" onclick="btnLIDelete_Click"
Runat="server" CssClass="InputButton" Text="Delete"></asp:button><IMG
height="5" src="/images/spc.gif" width="1" border="0"><BR>
</TD>
<TD align="left" ><IMG height="1" src="/images/spc.gif" width="5"
border="0">
<asp:button id="btnACCDelete" onclick="btnACCDelete_Click"
Runat="server" CssClass="InputButton" Text="Delete"></asp:button><IMG
height="5" src="/images/spc.gif" width="1" border="0"><BR>
</TD>
</TR>
datagrid has a CheckBox. I am trying to select a bunch of rows from th
einner datagrid and click a delete button to delete them, but it doe
not work. I reference the inner datagrid directly by its ID and I get
an error Object reference set to null.
If I select the checkbox against the rows on the outter datagrid and
click a second delete button to delete, it works and deletes the
complete row including the inner datagrid rows correponding to the
outter datagrid row.
The code to delete the inner datagrid row is
Protected Sub btnAccDelete_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnACCDelete.Click
'Walk the grid looking for selected rows
Dim _i As Integer = 0
Dim _j As Integer = 0
Dim cb As CheckBox
Dim dgi As DataGridItem
Dim _AccId As Integer
''Dim da As SqlDataAdapter
For Each dgi In ACCDataGrid.Items
cb = CType(dgi.Cells(0).Controls(1), CheckBox)
Dim tmp As String = cb.ID
If cb.Checked Then
' Determine the key of the selected record ...
_AccId =
CType(LineItemsDataGrid.DataKeys(dgi.ItemIndex), Integer)
'Code to Delete the record goes here
End If
_i += 1
Next
RefreshDataGrid()
End Sub
The HTML Code for the Nested Datagrid is as follows:
<TR>
<TD colSpan="6">
<aspataGrid id="LineItemsDataGrid" Width="100%" runat="server"
AutoGenerateColumns="False" HorizontalAlign="Center"
AllowSorting="True" AlternatingItemStyle-CssClass="GridAlternatingRow">
<AlternatingItemStyle
CssClass="GridAlternatingRow"></AlternatingItemStyle>
<HeaderStyle CssClass="GridColumnHeading"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="Select">
<HeaderStyle CssClass="GridColumnHeading"></HeaderStyle>
<ItemTemplate>
<asp:CheckBox id="CheckBox1" runat="server"
EnableViewState="True"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:HyperLinkColumn
DataNavigateUrlFormatString="JavaScriptopup('LineItem.aspx?LineItemId={0}&Process=1&',
'Add Line Item', '250','1200', '345','345','275', '1');"
DataNavigateUrlField="ProcessLineItemId" DataTextField="Description"
HeaderText="Line Items"></asp:HyperLinkColumn>
<asp:BoundColumn DataField="description" HeaderText="Description">
<HeaderStyle HorizontalAlign="Center"
CssClass="GridColumnHeading"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="unitPrice" HeaderText="Unit Price">
<HeaderStyle HorizontalAlign="Center"
CssClass="GridColumnHeading"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="quantity" HeaderText="Quantity">
<HeaderStyle HorizontalAlign="Center"
CssClass="GridColumnHeading"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="lineItemTotal" HeaderText="Amount">
<HeaderStyle HorizontalAlign="Center"
CssClass="GridColumnHeading"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn HeaderText="Discounted Total">
<HeaderStyle HorizontalAlign="Center"
CssClass="GridColumnHeading"></HeaderStyle>
</asp:BoundColumn>
<asp:TemplateColumn HeaderText="Account Classification">
<ItemTemplate>
<aspataGrid id="ACCDataGrid" Runat="server"
AutoGenerateColumns="False" HorizontalAlign="Center"
AllowSorting="True" AlternatingItemStyle-CssClass="GridAlternatingRow"
DataKeyField="AccCodeId" DataSource='<%#
GetAcc(DataBinder.Eval(Container.DataItem, "ProcessLineItemId"))%>'>
<AlternatingItemStyle
CssClass="GridAlternatingRow"></AlternatingItemStyle>
<HeaderStyle CssClass="GridColumnHeading"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="Select">
<HeaderStyle CssClass="GridColumnHeading"></HeaderStyle>
<ItemTemplate>
<asp:CheckBox id="Checkbox3" runat="server"
EnableViewState="True"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:HyperLinkColumn HeaderText="Account Classification Code"
DataTextField="AccountClassificationCode"
DataNavigateUrlField="AccCodeId"
DataNavigateUrlFormatString="JavaScriptopup('AccountingCode.aspx?AccId={0}&Process=1&','Add
Account Classification Code', '250','1000',
'500','500','275','1');"></asp:HyperLinkColumn>
<asp:BoundColumn DataField="CalculatedAmount"
HeaderText="Amount">
<HeaderStyle HorizontalAlign="Center"
CssClass="GridColumnHeading"></HeaderStyle>
</asp:BoundColumn>
</Columns>
</aspataGrid>
</ItemTemplate>
</asp:TemplateColumn>
<asp:HyperLinkColumn runat="server"
DataNavigateUrlField="ProcessLineItemId"
DataNavigateUrlFormatString="JavaScriptopup('AccountingCode.aspx?LineItemID={0}&Process=1&','Add
Account Classification Code', '250','1000', '500','500','275','1');"
Text="Add New ACC"></asp:HyperLinkColumn>
</Columns>
</aspataGrid></TD>
</TR>
<TR>
<TD align="left"><IMG height="1" src="/images/spc.gif" width="5"
border="0">
<asp:button id="btnLIDelete" onclick="btnLIDelete_Click"
Runat="server" CssClass="InputButton" Text="Delete"></asp:button><IMG
height="5" src="/images/spc.gif" width="1" border="0"><BR>
</TD>
<TD align="left" ><IMG height="1" src="/images/spc.gif" width="5"
border="0">
<asp:button id="btnACCDelete" onclick="btnACCDelete_Click"
Runat="server" CssClass="InputButton" Text="Delete"></asp:button><IMG
height="5" src="/images/spc.gif" width="1" border="0"><BR>
</TD>
</TR>