0

ASP Webサイトにグリッドビューがあり、各行を処理し、条件に基づいて、行を保持するか、削除して別のグリッドビューに追加する必要があります。組み込みメソッドの1つを使用して、行を削除する方法を理解しました。オンラインで見つけたものはすべて、「gridview.Rows.Add(row)」プロパティを使用するように指示していますが、VisualStudioで次のエラーが発生します。

「「追加」は「System.Web.UI.WebControls.GridViewRowCollection」のメンバーではありません。」

  • grdTrainingは、調査する結果を含む「マスター」グリッドビューです。
  • grdExpTrainingは、「マスター」からプルされた行を取得する「セカンダリ」グリッドビューです。
  • grdTraining_RowDataBoundは、WebサイトがgrdTrainingに配置するレコードを見つけるたびに呼び出されるメソッドです。

    Protected Sub grdTraining_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grdTraining.RowDataBound
    
       ' Grey out expired training courses
       Dim row As GridViewRow
       row = e.Row
       Dim incomingDate As String
       incomingDate = row.Cells(4).Text.ToString()
    
       If (e.Row.RowType <> DataControlRowType.DataRow) Then
           Exit Sub
       End If
    
       Try
           Dim expDate As Date = incomingDate
           If (expDate < DateTime.Today) Then
               grdExpTraining.Rows.Add(row)    'The line that is causing the error
               grdTraining.DeleteRow(trnIndex)
           End If
       Catch ex As Exception
       End Try
    
       trnIndex += 1
    End Sub
    
4

3 に答える 3

2

次のコードを使用して、グリッドビューに行を追加することができました。基本的に、ネストされたグリッドビューを完全に新しいグリッドビューのように扱い、プロセス全体をやり直す必要がありました。これは、ネストされたグリッドビューに1つの行を配置することを計画している場合にものみ機能します。それ以外の場合は、DataTableおよびDataRow宣言のスコープで遊ぶことができます。

            'Create datatable and columns
            Dim dtable As New DataTable
            dtable.Columns.Add(New DataColumn("StateCode"))
            dtable.Columns.Add(New DataColumn("CourseDesc"))
            dtable.Columns.Add(New DataColumn("Hours"))
            dtable.Columns.Add(New DataColumn("EffectiveDate"))
            dtable.Columns.Add(New DataColumn("ExpirationDate"))
            dtable.Columns.Add(New DataColumn("LastChange"))

            'Create counter to prevent out of bounds exception
            Dim i As Integer = row.Cells.Count

            'Create object for RowValues
            Dim RowValues As Object() = {"", "", "", "", "", ""}

            'Fill row values appropriately
            For index As Integer = 0 To i - 1
                RowValues(index) = row.Cells(index).Text
            Next

            'create new data row
            Dim dRow As DataRow
            dRow = dtable.Rows.Add(RowValues)
            dtable.AcceptChanges()

            'now bind datatable to gridview... 
            grdExpTraining.DataSource = dtable
            grdExpTraining.DataBind()
于 2012-09-06T22:29:04.587 に答える
0

grdExpTrainingでCopyToを使用し、行をArrayListに追加してから、GridViewRowCollectionを再度初期化する必要があると思います。

于 2012-09-06T14:56:12.933 に答える
0

dbレコード数から学生情報を取得するようにgridviewで行を自動化するのが好きな場合は、これが役立つ可能性があります。

HTML

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    CellPadding="2" CellSpacing="1" DataKeyNames="Roll_No,ID_Number,Marks,Remarks" ForeColor="#333333" GridLines="None">
        <AlternatingRowStyle BackColor="White" />
        <Columns>
          <asp:TemplateField HeaderText="Roll No">
            <ItemTemplate>
              <asp:Label ID="txtRoll_No" runat="server"></asp:Label>
            </ItemTemplate>
          </asp:TemplateField>
          <asp:TemplateField HeaderText="ID Number">
            <ItemTemplate>
              <asp:Label ID="txtID_Number" runat="server"></asp:Label>
            </ItemTemplate>
          </asp:TemplateField>
          <asp:TemplateField HeaderText="Marks">
            <ItemTemplate>
              <asp:TextBox ID="txtMarks" runat="server" Width="50px" CssClass="text" 
            Text=""></asp:TextBox>
            </ItemTemplate>
          </asp:TemplateField>
          <asp:TemplateField HeaderText="Remarks">
            <ItemTemplate>
              <asp:TextBox ID="txtRemarks" runat="server" CssClass="text" Width="200"></asp:TextBox>
            </ItemTemplate>
          </asp:TemplateField>
        </Columns>
        <EditRowStyle BackColor="#2461BF" />
        <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
        <RowStyle BackColor="#EFF3FB" />
        <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
        <SortedAscendingCellStyle BackColor="#F5F7FB" />
        <SortedAscendingHeaderStyle BackColor="#6D95E1" />
        <SortedDescendingCellStyle BackColor="#E9EBEF" />
        <SortedDescendingHeaderStyle BackColor="#4870BE" />
      </asp:GridView>

VB.NETコード

Dim dt As New DataTable()
Dim i As Integer
dt.Columns.Add(New DataColumn("Roll_No"))
dt.Columns.Add(New DataColumn("ID_Number"))
dt.Columns.Add(New DataColumn("Marks"))
dt.Columns.Add(New DataColumn("Remarks"))
For i = 1 To 10
  Dim dRow As DataRow      
  dRow = dt.NewRow
  dt.Rows.Add(dRow)    
  dt.AcceptChanges()      
Next i
'now bind datatable to gridview... 
GridView1.DataSource = dt
GridView1.DataBind()

With GridView1
  For i = 0 To .Rows.Count - 1
    Dim Roll_No As Label = DirectCast(.Rows(i).Cells(1).FindControl("txtRoll_No"), Label)
    Dim ID_Number As Label = DirectCast(.Rows(i).Cells(2).FindControl("txtID_Number"), Label)        
    Roll_No.Text = i + 1
    ID_Number.Text = "2014-01-" & i + 1
  Next
End With

マークと注釈を編集し、単一の行を次々に挿入する場合はINSERT INTO DBを使用して、ループを削除することができます。

于 2014-02-22T05:00:47.997 に答える