1

私は vb.net を使用しており、Itemtemplate フィールドとして Textbox を含む 4 つの列を含む gridview を持っています。このグリッドビューには学生の情報が含まれており、テキストボックスは毎日の学生の出席状況です。したがって、グリッドビューに存在するすべてのテキストボックスからの入力を、各学生の出席の入力として取得する必要があります。ここでは、生徒数が 80 人を超える場合があるため、ページングが有効になっています。しかし、問題は、グリッドビューの行をループしてテキストボックスの入力を取得するときに、最初のページの値のみを取得し、残りが残っていることです。これについて本当に助けが必要です。どんな助けでも大歓迎です。

これは GridView コードです。

 <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
        AutoGenerateColumns="False" BorderColor="Black" BorderStyle="Solid" 
        CellPadding="4" Font-Bold="True" Font-Size="Small" ForeColor="#333333" 
        OnPageIndexChanging="GridView1_PageIndexChanging" PageSize="20">
        <Columns>
            <asp:TemplateField HeaderText="No.">
                <ItemTemplate>
                    <%# Container.DataItemIndex + 1 %>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="crkod" HeaderText="Student ID" />
            <asp:BoundField DataField="crnama" HeaderText="Student Name" />
            <asp:TemplateField HeaderText="Attendance Status" 
                ItemStyle-HorizontalAlign="Center">
                <ItemTemplate>
                    <asp:TextBox ID="txtAttend" runat="server" BackColor="Control" MaxLength="1" 
                        Width="12px"></asp:TextBox>
                </ItemTemplate>
                <ItemStyle HorizontalAlign="Center" />
            </asp:TemplateField>
        </Columns>
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <HeaderStyle Font-Bold="True" />
    </asp:GridView>

保存ボタンのコードビハインドは次のとおりです。

For k As Integer = 0 To Me.GridView1.PageCount - 1
        Me.GridView1.PageIndex = k

        Dim rowNum As Integer = Me.GridView1.Rows.Count

        For i As Integer = 0 To rowNum - 1
            Dim tb As TextBox = DirectCast(GridView1.Rows(i).FindControl("txtAttend"), TextBox)
            attendSts = tb.Text


            studntID = GridView1.Rows(i).Cells(1).Text


            Sql = "INSERT INTO attendance (studentID,attendStatus,attendDate,courseID,yearsem,monthsem)" _
            & " VALUES (" _
             & "'" & studntID & "'," _
             & "'" & attendSts & "'," _
             & "'" & attnDate & "'," _
             & "'" & courseCode & "'," _
             & yearsem & "," _
             & monthsem & ")"

            CreateCommand(Sql, strConn)
        Next
    Next

前もって感謝します。

4

2 に答える 2

2

私のプロジェクトで使用している以下のコマンドを使用できます。そのロジックは非常に単純で、すべてのページを通過し、すべてのページですべての行を通過します。これを行う前に現在のページを取得し、そこに戻ることができるすべてをループした後に取得することもできます;)

//Get Current Page Index so You can get back here after commands
                int a = GridView1.PageIndex;
    //Loop through All Pages
                for (int i = 0; i < GridView1.PageCount; i++)
                {
    //Set Page Index
                    GridView1.SetPageIndex(i);
    //After Setting Page Index Loop through its Rows
                    foreach (GridViewRow row in GridView1.Rows)
                    {
                        //Do Your Commands Here
                    }
                }
    //Getting Back to the First State
                GridView1.SetPageIndex(a);
于 2015-08-21T19:31:58.353 に答える
0

グリッド内のデータを直接操作しようとしてはいけません (これは新しいプログラマーによくある問題です)。グリッドをバインドしたデータを操作する必要があります。これは、GridView1.Datasource = ?page_load または DataBinding イベントで最も可能性が高いものとして設定したものです。

これがデータテーブルであると仮定すると、次のようにする必要があります。

For each dr as datarow in ctype(GridView1.Datasource,DataTable).Rows
  attendSts = dr("Attend")
  studntID = dr("studntID")
  ..Your insert code here
Next
于 2013-10-18T18:32:20.047 に答える