-1

テンプレートフィールドを含むグリッドビューがあり、1 つの列には、SQL ステートメントを入力する必要があるドロップダウンリストが含まれています。グリッドを動的に作成し、ドロップダウン リストにアクセスするために rowdatabound を呼び出しましたが、エラーが発生し続けます: オブジェクト参照がオブジェクトのインスタンスに設定されていません。誰にもアイデアはありますか?

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:CommandField EditText="Add" ShowEditButton="True" />
        <asp:TemplateField>
            <EditItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" />                          
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <EditItemTemplate>
                <asp:DropDownList ID="DropDownList1" runat="server" />
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label2" runat="server"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <EditItemTemplate>
                <asp:TextBox ID="TextBox2" runat="server" />
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label3" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>        
            <EditItemTemplate>
                <asp:DropDownList ID="DropDownList2" runat="server" />        
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label4" runat="server" />
            </ItemTemplate>
            </asp:TemplateField>
        <asp:TemplateField>        
            <EditItemTemplate>
                <asp:TextBox ID="TextBox3" runat="server" />
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label5" runat="server" />        
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <EditItemTemplate>
                <asp:Label ID="Label6" runat="server" />
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label7" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

これは、GridView を動的に作成するためのコードです。これは、page_load イベントで行われます。

If Not Page.IsPostBack Then
        Dim CommittedTable As New DataTable("Committed")

        CommittedTable.Columns.Add("Date Posted", GetType(Date))
        CommittedTable.Columns.Add("Vendor", GetType(String))
        CommittedTable.Columns.Add("Expense Description", GetType(String))
        CommittedTable.Columns.Add("Ledger", GetType(String))
        CommittedTable.Columns.Add("Amount", GetType(String))
        CommittedTable.Columns.Add("Initials", GetType(String))

        For i As Integer = 0 To GridView1.Rows.Count
            Dim tableRow As DataRow = CommittedTable.NewRow()

            tableRow("Date Posted") = Date.Today
            tableRow("Vendor") = ""
            tableRow("Expense Description") = ""
            tableRow("Ledger") = ""
            tableRow("Amount") = ""
            tableRow("Initials") = ""
            CommittedTable.Rows.Add(tableRow)
        Next

        Session("CommsTable") = CommittedTable
        BindDataComm()

    End If

最後に、これは RowDataBound イベント ハンドラー コードです。

Dim ddl As DropDownList = DirectCast(e.Row.FindControl("DropDownList1"), DropDownList)
    If ddl Is Nothing Then
        result = dbConnect(dbType.SqlServer, ConfigurationManager.AppSettings("SQLServerConnection"))
        If result = "Successful" Then
            dt = FillDataTable(dbType.SqlServer, "SELECT V_VendorNo + ' | ' + V_VendorName FROM VendorTbl")
            ddl.DataSource = dt 'it errors out here'
            ddl.DataTextField = "V_VendorNo"
            ddl.DataValueField = "V_VendorName"
            ddl.DataBind()
        End If
    End If
4

1 に答える 1

1

RowDatabound イベントで Data をバインドする前に、Datarow の RowType を確認していますか? そうでない場合は確認してください....

于 2012-06-07T13:28:39.840 に答える