Home All Groups Group Topic Archive Search About

DropDownList web control in DataGrid

Author
5 Apr 2006 2:26 PM
glenn
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:DataGrid 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:DropDownList 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:DataGrid>

AddThis Social Bookmark Button