G
Guest
Hi folks,
I am getting an error "Object reference not set to an instance of an object".
It seems I have everything in place but something is obviously in err. If
you could take a quick peak at my code segments and provide any insight in a
reply, I would be eternally grateful. My table name is "rfi" and the field
with a dropdownlist control is called "contract". I have imported the
System.Data and System.Data.OleDb libraries. Currently I am running the page
with a local web server. If I run the page without the reference to the
contract field with its associated functions, it works fine. A question
field is shown only as an example field and is not the problem. All code
referencing the contract field may be causing my problem.
' GLOBAL VARIABLE
Dim ddlContractDataSet as DataSet = New DataSet ( )
' UPDATE ROW CODE SNIPPET
Sub DataGrid1_UpdateRow (sender As Object, e As DataGridCommandEventArgs)
If Not Page.IsValid Then Exit Sub
' GET INFO FROM FIELDS
Dim questionTextBox as TextBox = e.Item.Cells (1).FindControl
("txtQuestion") ' THIS LINE WORKS FINE AND IS SHOWN ONLY AS AN EXAMPLE
Dim ddlContracts as DropDownList = e.Item.Cells (2).FindControl
("ddlContract")
...... ' OTHER FIELDS
' PROVIDE A SQL UPDATE STATEMENT
' PROVIDE A CONNECTION STRING AND A CONNECTION
' PROVIDE A dbCOMMAND with COMMANDTEXT=SQL STATEMENT AND A
dbCONNECTION=CONNECTION
' DECLARE A PARAMETER
Dim contractParam as IDataParameter = New OleDbParameter
("@contractParam", OleDbType.varchar, 50)
contractParam.Value = ddlContracts.SelectedIndex
dbCommand.Parameters.Add (contractParam)
End Sub
' PROVIDE FUNCTION TO POPULATE DROPDOWNLIST FROM DB
Function GetContractChoice( ) As DataSet
Dim strConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Ole
DB Services=-4; Data Source=C:\FDMgmt\webfiles\database\fdmdb.mdb"'
Dim dbConnection As IDbConnection = New OleDbConnection(connectionString)
Dim queryString As String = "SELECT [rfi].[contract] FROM [rfi]"
Dim dbCommand As IDbCommand = New OleDbCommand
Dim dbConnection As IDbConnection = New OleDbConnection(strConnString)
dbCommand.CommandText = queryString
dbCommand.Connection = dbConnection
Dim dataAdapter As IDbDataAdapter = New OleDbDataAdapter
dataAdapter.SelectCommand = dbCommand
dataAdapter.Fill(ddlContractDataSet)
Return ddlContractDataSet
End Function
' PROVIDE FUNCTION TO GET THE SELECTED ITEM
Function GetContractSelectedIndex(contract_id as String) as Integer
Dim iLoop as Integer
Dim dt as DataTable = ddlContractDataSet.Tables("rfi")
For iLoop = 0 to dt.Rows.Count - 1
if contract_id = dt.Rows(iLoop)("ID").ToString() then
Return iLoop
end if
Next iLoop
End Function
' PROVIDE DATAGRID INFO IN THE HTML
<asp
ataGrid id="DataGrid1" runat="server"
OnItemDataBound="DataGrid1_RowDataBound"
OnDeleteCommand="DataGrid1_DeleteRow" DataKeyField="ID"
OnCancelCommand="DataGrid1_CancelRow" OnUpdateCommand="DataGrid1_UpdateRow"
OnEditCommand="DataGrid1_EditRow" OnSortCommand="DataGrid1_Sorting"
AllowSorting="True" OnPageIndexChanged="DataGrid1_Paging" AllowPaging="True"
PageSize="2" Width="75%" AutoGenerateColumns="False"
AlternatingItemStyle-BackColor="#dddddd" CellPadding="5" Font-Size="9pt"
Font-Name="Verdana">
<HeaderStyle backcolor="Navy" forecolor="White" font-size="13pt"
font-bold="True" horizontalalign="Center" />
<PagerStyle backcolor="Navy" forecolor="White" font-size="8pt"
font-bold="True" horizontalalign="Right" nextpagetext="Next >"
prevpagetext="< Prev" />
<Columns>
<asp:EditCommandColumn EditText="Edit" UpdateText="Update"
CancelText="Cancel" ButtonType="LinkButton" />
<asp:ButtonColumn Text="Delete" ButtonType="LinkButton"
CommandName="Delete" />
' FIRST COLUMN (NOT THE PROBLEM, SHOWN AS AN EXAMPLE ONLY)
<asp:TemplateColumn HeaderText="Question" SortExpression="question">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "question") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox runat="server" id="txtQuestion"
Columns="50" MaxLength="2000" Rows="10" Font-Name="Verdana" Font-Size="9pt"
TextMode="MultiLine" Text='<%# DataBinder.Eval(Container.DataItem,
"question") %>' />
<asp:RequiredFieldValidator runat="server"
ControlToValidate="txtQuestion" Display="Dynamic" ErrorMessage="<br />You
must provide a Question." />
</EditItemTemplate>
</asp:TemplateColumn>
' PROVIDE CONTRACT COLUMN INFO (THIS IS CODE THAT MAY BE IN ERR)
<asp:TemplateColumn HeaderText="Contract"
SortExpression="contract">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "contract") %>
</ItemTemplate>
<EditItemTemplate>
<asp
ropDownList runat="server" id="ddlContract"
DataSource="<%# GetContractChoice( ) %>" DataTextField="contract"
DataValueField="ID" SelectedIndex='<%#
GetContractSelectedIndex(Container.DataItem("ID")) %>' Columns="20"
MaxLength="50" Font-Name="Verdana" Font-Size="9pt" Text='<%#
DataBinder.Eval(Container.DataItem, "contract") %>' />
<asp:RequiredFieldValidator runat="server"
ControlToValidate="ddlContract" Display="Dynamic" ErrorMessage="<br />You
must provide a contract." />
</EditItemTemplate>
</asp:TemplateColumn>
..... ' MORE COLUMNS
</Columns>
</asp
ataGrid>
I am getting an error "Object reference not set to an instance of an object".
It seems I have everything in place but something is obviously in err. If
you could take a quick peak at my code segments and provide any insight in a
reply, I would be eternally grateful. My table name is "rfi" and the field
with a dropdownlist control is called "contract". I have imported the
System.Data and System.Data.OleDb libraries. Currently I am running the page
with a local web server. If I run the page without the reference to the
contract field with its associated functions, it works fine. A question
field is shown only as an example field and is not the problem. All code
referencing the contract field may be causing my problem.
' GLOBAL VARIABLE
Dim ddlContractDataSet as DataSet = New DataSet ( )
' UPDATE ROW CODE SNIPPET
Sub DataGrid1_UpdateRow (sender As Object, e As DataGridCommandEventArgs)
If Not Page.IsValid Then Exit Sub
' GET INFO FROM FIELDS
Dim questionTextBox as TextBox = e.Item.Cells (1).FindControl
("txtQuestion") ' THIS LINE WORKS FINE AND IS SHOWN ONLY AS AN EXAMPLE
Dim ddlContracts as DropDownList = e.Item.Cells (2).FindControl
("ddlContract")
...... ' OTHER FIELDS
' PROVIDE A SQL UPDATE STATEMENT
' PROVIDE A CONNECTION STRING AND A CONNECTION
' PROVIDE A dbCOMMAND with COMMANDTEXT=SQL STATEMENT AND A
dbCONNECTION=CONNECTION
' DECLARE A PARAMETER
Dim contractParam as IDataParameter = New OleDbParameter
("@contractParam", OleDbType.varchar, 50)
contractParam.Value = ddlContracts.SelectedIndex
dbCommand.Parameters.Add (contractParam)
End Sub
' PROVIDE FUNCTION TO POPULATE DROPDOWNLIST FROM DB
Function GetContractChoice( ) As DataSet
Dim strConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Ole
DB Services=-4; Data Source=C:\FDMgmt\webfiles\database\fdmdb.mdb"'
Dim dbConnection As IDbConnection = New OleDbConnection(connectionString)
Dim queryString As String = "SELECT [rfi].[contract] FROM [rfi]"
Dim dbCommand As IDbCommand = New OleDbCommand
Dim dbConnection As IDbConnection = New OleDbConnection(strConnString)
dbCommand.CommandText = queryString
dbCommand.Connection = dbConnection
Dim dataAdapter As IDbDataAdapter = New OleDbDataAdapter
dataAdapter.SelectCommand = dbCommand
dataAdapter.Fill(ddlContractDataSet)
Return ddlContractDataSet
End Function
' PROVIDE FUNCTION TO GET THE SELECTED ITEM
Function GetContractSelectedIndex(contract_id as String) as Integer
Dim iLoop as Integer
Dim dt as DataTable = ddlContractDataSet.Tables("rfi")
For iLoop = 0 to dt.Rows.Count - 1
if contract_id = dt.Rows(iLoop)("ID").ToString() then
Return iLoop
end if
Next iLoop
End Function
' PROVIDE DATAGRID INFO IN THE HTML
<asp
OnItemDataBound="DataGrid1_RowDataBound"
OnDeleteCommand="DataGrid1_DeleteRow" DataKeyField="ID"
OnCancelCommand="DataGrid1_CancelRow" OnUpdateCommand="DataGrid1_UpdateRow"
OnEditCommand="DataGrid1_EditRow" OnSortCommand="DataGrid1_Sorting"
AllowSorting="True" OnPageIndexChanged="DataGrid1_Paging" AllowPaging="True"
PageSize="2" Width="75%" AutoGenerateColumns="False"
AlternatingItemStyle-BackColor="#dddddd" CellPadding="5" Font-Size="9pt"
Font-Name="Verdana">
<HeaderStyle backcolor="Navy" forecolor="White" font-size="13pt"
font-bold="True" horizontalalign="Center" />
<PagerStyle backcolor="Navy" forecolor="White" font-size="8pt"
font-bold="True" horizontalalign="Right" nextpagetext="Next >"
prevpagetext="< Prev" />
<Columns>
<asp:EditCommandColumn EditText="Edit" UpdateText="Update"
CancelText="Cancel" ButtonType="LinkButton" />
<asp:ButtonColumn Text="Delete" ButtonType="LinkButton"
CommandName="Delete" />
' FIRST COLUMN (NOT THE PROBLEM, SHOWN AS AN EXAMPLE ONLY)
<asp:TemplateColumn HeaderText="Question" SortExpression="question">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "question") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox runat="server" id="txtQuestion"
Columns="50" MaxLength="2000" Rows="10" Font-Name="Verdana" Font-Size="9pt"
TextMode="MultiLine" Text='<%# DataBinder.Eval(Container.DataItem,
"question") %>' />
<asp:RequiredFieldValidator runat="server"
ControlToValidate="txtQuestion" Display="Dynamic" ErrorMessage="<br />You
must provide a Question." />
</EditItemTemplate>
</asp:TemplateColumn>
' PROVIDE CONTRACT COLUMN INFO (THIS IS CODE THAT MAY BE IN ERR)
<asp:TemplateColumn HeaderText="Contract"
SortExpression="contract">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "contract") %>
</ItemTemplate>
<EditItemTemplate>
<asp
DataSource="<%# GetContractChoice( ) %>" DataTextField="contract"
DataValueField="ID" SelectedIndex='<%#
GetContractSelectedIndex(Container.DataItem("ID")) %>' Columns="20"
MaxLength="50" Font-Name="Verdana" Font-Size="9pt" Text='<%#
DataBinder.Eval(Container.DataItem, "contract") %>' />
<asp:RequiredFieldValidator runat="server"
ControlToValidate="ddlContract" Display="Dynamic" ErrorMessage="<br />You
must provide a contract." />
</EditItemTemplate>
</asp:TemplateColumn>
..... ' MORE COLUMNS
</Columns>
</asp