0

ページの読み込み:-

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Try
        Page.Title = "Batches - " & Website

        BindBatches()

    Catch ex As Exception
        Logger.WriteError("Error in Page_Load of Batches/batches.aspx", ex)
    End Try
End Sub

このサブルーチンは、グリッドビューでbatch_nameをバインドします

 Protected Sub BindBatches()
    Try
        Dim ds As New DataSet()
        ds = Dal.ExecuteDataset("select batch_name from tblBatch")
        If Not ds Is Nothing AndAlso ds.Tables(0).Rows.Count > 0 Then
            gvBatches.DataSource = ds
            gvBatches.DataBind()
            gvBatches.Visible = True
        Else
            gvBatches.Visible = False
        End If
    Catch ex As Exception
        Logger.WriteError("Error in BindBatches of Batches/batches.aspx", ex)
    End Try
End Sub

これがgridviewです:-

<asp:GridView ID="gvBatches" runat="server">
  <Columns>
     <asp:TemplateField HeaderText="Batch Name">
          <HeaderStyle Width="40px"></HeaderStyle>
               <ItemTemplate>
                    <asp:Label ID="lblBatchName" runat="server">
                    </asp:Label>
               </ItemTemplate>
     </asp:TemplateField>
  </Columns>
</asp:GridView>

そしてデータバウンドイベント:-

Protected Sub gvBatches_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvBatches.RowDataBound
  If e.Row.RowType = ListItemType.Item Or e.Row.RowType = ListItemType.AlternatingItem Then
    Dim batchName As Label = e.Row.FindControl("lblBatchName")
    batchName.Text = e.Row.DataItem("batch_name")
  End If
End Sub

しかし、デバッグすると、以下の例外が表示されます--gvBatches.DataBind()

DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'id'.

このIDが何なのかわかりませんか?私のテーブルにはそのような列はありません。

4

2 に答える 2

0

aspxファイルで、ラベル宣言を次のように変更できます。

<asp:Label ID="lblBatchName" runat="server" Text='<%# Eval("batch_name") %>'>

Protected Sub gvBatches_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvBatches.RowDataBoundそしてあなたは機能を必要としません

于 2013-01-22T14:55:12.040 に答える
0

最初にオンに設定することをお勧めしOPTION STRICTます。このコード (DataItemObject) を見るのも苦痛です:

batchName.Text = e.Row.DataItem("batch_name")

代わりに、適切にキャストしてみてください。

Dim row As DataRow = DirectCast(e.Row.DataItem, DataRowView).Row
batchName.Text = row.Field(Of String)("batch_name")
于 2013-01-22T14:47:21.253 に答える