Заполните сетку данных включенной подкачкой в ​​asp.net - PullRequest
0 голосов
/ 21 сентября 2010

У меня есть сетка данных с включенной подкачкой, которая может иметь 10 строк на страницу. Также у меня есть DataTable с 16 строками. Я хочу заполнить сетку данных динамически с помощью цикла «for», чтобы пройти по всей DataTable и заполнить DataGrid.

Я понимаю, что существует проблема, когда счетчик попадет в строку 11. Нужно ли менять страницу таблицы данных, когда счетчик будет 11? Потому что это не позволяет мне добавить более 10 строк в сетку данных.

Будет признателен, если кто-нибудь подскажет, как это реализовать.

Заранее спасибо,

Грег

1 Ответ

2 голосов
/ 24 сентября 2010

Это в значительной степени, как я это сделаю.Я не использую for, поскольку условная проверка флажков находится в ItemDataBound, делая это таким образом, что DataGrid будет выполнять всю подкачку для меня.* Кодовый код:

    protected void Page_Load(object sender, EventArgs e)
    {
        DataTable numberDataTable;

        if (!IsPostBack)
        {
            // Build a 16-row DataTable
            numberDataTable = new DataTable();
            numberDataTable.Columns.Add(new DataColumn("Number"));

            for (int c = 1; c < 17; c++)
            {
                DataRow numberDataRow = numberDataTable.NewRow();
                numberDataRow[0] = c;
                numberDataTable.Rows.Add(numberDataRow);
            }

            ViewState.Add("Data", numberDataTable);

            // DataBind the table into the DataGrid
            MyDataGrid.DataSource = numberDataTable;
            MyDataGrid.DataBind();
        }
    }

    protected void MyDataGrid_PageIndexChanged(object sender, DataGridPageChangedEventArgs e)
    {
        DataTable numberDataTable;

        // Get the DataTable out of Viewstate
        numberDataTable = (DataTable)ViewState["Data"];

        // Set the new page number
        MyDataGrid.CurrentPageIndex = e.NewPageIndex;

        // Bind the grid
        MyDataGrid.DataSource = numberDataTable;
        MyDataGrid.DataBind();
    }

    protected void MyDataGrid_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        DataRow numberDataRow;

        // Selective checking of the CheckBox

        // Only do this for Item and ALternatingItem, we don't do this for headers, footers etc
        if (e.Item.ItemType == ListItemType.Item | e.Item.ItemType == ListItemType.AlternatingItem)
        {
            numberDataRow = ((DataRowView)e.Item.DataItem).Row;

            // Check if we have an even number
            if ((int.Parse(numberDataRow[0].ToString()) % 2) == 0)
            {
                // Find our checkbox control in the DataGrid for the current row and check it
                CheckBox checkBox = (CheckBox)e.Item.FindControl("CheckBox");
                checkBox.Checked = true;
            }
        }
    }

Это дает:

alt text
alt text

...