[英]C# winforms gridview sorting after binding data programatically
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.