0

現在、ページングが有効になっている aspx ページに GridView コントロールがあり、行コレクション/カウント全体をループして、選択したレコードを処理する必要があります。現在のコードでは、GridView 行の現在のページのみをループします。

このタスクを達成するための最良の方法は何ですか?

これが私の現在のコードです:

ASPX ページ:

<asp:GridView ID="MyGridView" runat="server" AllowPaging="true" PageSize="20">
   <Columns>
      <!-- My Column list -->
   </Columns>
</asp:GridView>
<asp:Button id="MyButton" runat="server" Text="Add" OnClick="MyButton_Click" />  

コードビハインド:

protected void MyButton_Click(object sender, EventArgs e)
{
    for (int Count = 0; Count < MyGridView.Rows.Count; Count++)
    {
        //The row count is 20 and only contains the GridViewRow object in the current page view  
        //I want to retrieve the all GridViews rows so I can add them to a ReorderList control
    }   
}
4

5 に答える 5

3

次のコードを使用するだけです。

//Change gridview to
GridView1.AllowPaging = false;
GridView1.DataBind();

 //Transfer rows from GridView to table
for (int i = 0; i < GridView1.Rows.Count; i++)
{
    if (GridView1.Rows[i].RowType == DataControlRowType.DataRow)
    {
        for (int j = 0; j < GridView1.Rows[0].Cells.Count; j++)
        {
              //Add your code here..
        }
    }
}

//After filling your datatable change gridview paging style back to first, ie.

GridView1.AllowPaging = true;
GridView1.DataBind();

これはあなたを助けるかもしれません、これがあなたにとって役に立ったかどうか私に知らせてください...

于 2011-11-09T05:21:31.103 に答える
3

はい。gridview UI は現在のページのみを認識するためです。データソースを取得し、そこから行数を決定します...

        int count = ((DataTable)MyGridView.DataSource).Rows.Count;

//また

        int count = ((ICollection<SomeRecord>)MyGridView.DataSource).Count;
于 2009-04-22T06:59:57.493 に答える
1

データ ソースの行数から行数を取得する必要があると思います。

行をフィルタリングする必要がある場合は、DataTable の / DataView のSelectメソッドを使用できます。

編集: gridview がページングされている場合、gridview.Rows.Count で実際の行数を取得することはできません。あなたのコメントに応じて、listDataSourceジェネリックリストを使用してグリッドビューをバインドしていると仮定すると、次のように行数を取得できます:

List<DataSourceItem> selectedRows = 
  listDataSource.FindAll(delegate(DataSourceItem item)
  {
      // Assuming you have a IsSelected bool property 
      // that refers your row is selected : 
      return item.IsSelected;
  });
  int rowCount = selectedRows.Count;
于 2009-04-21T20:23:13.200 に答える
0

セッションまたは状態を使用して保存します。

protected void Set_CheckboxStatus()
    {
        CheckBox selectall = (CheckBox)EmployeeGrid.HeaderRow.FindControl("gcb_selectall");
        ArrayList cbstatuslist = new ArrayList();
        if (Session["childcbstatus"] != null)
        {
            cbstatuslist = (ArrayList)Session["childcbstatus"];
        }
        foreach (GridViewRow row in EmployeeGrid.Rows)
        {
            int cb_index = (int)row.DataItemIndex;  //For Getting DataItemIndex of EmployeeGrid 
            //int cb_index = (int)row.RowIndex;
            CheckBox cb_selemp = (CheckBox)row.FindControl("gcb_selemp");
            CheckBox cb_active = (CheckBox)row.FindControl("gcb_active");

            if (cb_selemp.Checked == true)
            {
                if (!cbstatuslist.Contains(cb_index))
                    cbstatuslist.Add(cb_index);
            }
            else
            {
                cbstatuslist.Remove(cb_index);
            }
        }
        Session["childcbstatus"] = cbstatuslist;
    }

arraylist から、ループするすべての行インデックスを取得し、ページングを使用してグリッドビューから値を取得できます。

于 2013-02-01T12:52:49.020 に答える