繁体   English   中英

以编程方式绑定数据后,C#winforms gridview排序

[英]C# winforms gridview sorting after binding data programatically

http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridview.columnheadermouseclick(v=vs.110).aspx

private void dataGridView1_ColumnHeaderMouseClick(
    object sender, DataGridViewCellMouseEventArgs e)
{
    ...
    // Sort the selected column.
    dataGridView1.Sort(newColumn, direction);
    newColumn.HeaderCell.SortGlyphDirection =
        direction == ListSortDirection.Ascending ?
        SortOrder.Ascending : SortOrder.Descending;
}

public CustomersListWrapper(DataGridView gridView)
{
    _gridView = gridView;
    _gridView.CellClick += dgwCustomersList_CellContentClick;
    _gridView.ColumnHeaderMouseClick += dgwCustomersList_ColumnHeaderMouseClick;

    ClearGrid();
    SetCustomersListHeader();
    ....

}

private void ClearGrid()
{
    _gridView.Rows.Clear();
    _gridView.Columns.Clear();
}

private void SetCustomersListHeader()
{
    _gridView.Columns.Add(DataGridViewColumnNames.Customers.ID, "Id");
    _gridView.Columns.Add(DataGridViewColumnNames.Customers.NAME, "Ime");
    _gridView.Columns[1].Width = 360;
    _gridView.Columns.Add(DataGridViewColumnNames.Customers.SURNAME, "Priimek");
    _gridView.Columns[2].Width = 360;
    _gridView.Columns.Add(DataGridViewColumnNames.Customers.ACCOUNT_NUMBER, "Št. računa");
    _gridView.Columns[3].Width = 120;
    _gridView.Columns.Add(DataGridViewColumnNames.Customers.CUSTOMER_NUMBER, "Št. stranke");
    _gridView.Columns[4].Width = 120;

    int nLastColumn = _gridView.Columns.Count - 1;
    for (int i = 0; i < _gridView.Columns.Count; i++)
    {
        if (nLastColumn == i)
        {
            _gridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
        }
    }
    ...
}

但问题是排序不起作用,它总是升序。 每当新数据动态地绑定到网格时,我都会像这样重置网格排序,

newColumn.HeaderCell.SortGlyphDirection

具有正确的值,但在绑定数据后数据丢失并且SortGlyphDirection再次为None。

我能以某种方式记住绑定后gridview的Column的值吗?

我想您是从DataTable绑定数据源吗? 更改数据源将重置以前的排序,我认为还有更多方法可以解决此问题:

-将上次使用的排序顺序存储在变量中,并使用DataGridView.DataSourceChanged或DataGridView.DataBindingComplete事件对新数据源进行排序并刷新网格

-存储上次使用的排序顺序,并在附加新数据源之前将您的源数据表排序为DataGridView中使用的排序顺序,然后在此之后更改数据源

您必须在数据源上继承IBindingList。 在Databind上。

以这种方式循环和绑定相反,我认为这更容易。

        dg_Transactions.Columns.Add("1", "Date");
        dg_Transactions.Columns.Add("2", "Amount");
        dg_Transactions.Columns.Add("3", "Description");

        foreach (var row in data.Transactions)
        {
            var n = dg_Transactions.Rows.Add();

            var i = 0;
            dg_Transactions.Rows[n].Cells[i++].Value = row.Date;;
            dg_Transactions.Rows[n].Cells[i++].Value = row.Amount;
            dg_Transactions.Rows[n].Cells[i++].Value = row.Description;
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM