怎么能在使用虚拟模式的同时,显示点击列标题后排序的功能??
5 个解决方案
#1
自顶
#2
顶,我也有同樣的問題
#3
估计是不能解决的问题。。。。
#4
使用虚拟模式后,列标题的排序功能就失效了。不要再试了
#5
还是可以实现的,但需要认为实现。通过DataView来实
DataView dv = DataTable.DefaultView //获取数据视图
通过dv.Sort方式来实现排序
在CellValueNeeded事件中加载视图的数据
e.Value = dv[e.RowIndex]["列"]
通过ColumnHeaderMouseClick事件来处理列标头的样式
参考代码
DataView dv = DataTable.DefaultView //获取数据视图
通过dv.Sort方式来实现排序
在CellValueNeeded事件中加载视图的数据
e.Value = dv[e.RowIndex]["列"]
通过ColumnHeaderMouseClick事件来处理列标头的样式
参考代码
//我的DataGridView一共8列,第一列为序号列无需排序
void dgvList_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (this.dv.Table == null)
return;
if (this.dv.Table.Rows.Count > 0)
{
switch (e.ColumnIndex)
{
case 0:
break;
case 1:
this.ColumnHeaderOperate(this.dgvList.Columns[1].HeaderCell, "gdkh", 1);
break;
case 2:
this.ColumnHeaderOperate(this.dgvList.Columns[2].HeaderCell, "gdxm", 2);
break;
case 3:
this.ColumnHeaderOperate(this.dgvList.Columns[3].HeaderCell, "cyltggs", 3);
break;
case 4:
this.ColumnHeaderOperate(this.dgvList.Columns[4].HeaderCell, "zzltgbbl", 4);
break;
case 5:
this.ColumnHeaderOperate(this.dgvList.Columns[5].HeaderCell, "yybmc", 5);
break;
case 6:
this.ColumnHeaderOperate(this.dgvList.Columns[6].HeaderCell, "yybdz", 6);
break;
case 7:
this.ColumnHeaderOperate(this.dgvList.Columns[7].HeaderCell, "yyblxdh", 7);
break;
default:
break;
}
}
}
/// <summary>
/// 处理列表头点击排序
/// </summary>
/// <param name="dgvColumnHeader">控件列表头</param>
/// <param name="strColumnName">列的名称</param>
/// <param name="nIndex">列的索引</param>
private void ColumnHeaderOperate(DataGridViewColumnHeaderCell dgvColumnHeader, string strColumnName, int nIndex)
{
switch (dgvColumnHeader.SortGlyphDirection)
{
case SortOrder.None:
this.dv.Sort = strColumnName;
dgvColumnHeader.SortGlyphDirection = SortOrder.Ascending;
break;
case SortOrder.Ascending:
this.dv.Sort = strColumnName + " DESC";
dgvColumnHeader.SortGlyphDirection = SortOrder.Descending;
break;
case SortOrder.Descending:
this.dv.Sort = strColumnName;
dgvColumnHeader.SortGlyphDirection = SortOrder.Ascending;
break;
default:
break;
}
//一共8列,除了排序列,别的列标头恢复原始状态
for (int i = 0; i < 8; i++)
{
if (i != nIndex)
{
this.dgvList.Columns[i].HeaderCell.SortGlyphDirection = SortOrder.None;
}
}
this.dgvList.RowCount = this.dv.Table.Rows.Count;
this.dgvList.Refresh();
}
#1
自顶
#2
顶,我也有同樣的問題
#3
估计是不能解决的问题。。。。
#4
使用虚拟模式后,列标题的排序功能就失效了。不要再试了
#5
还是可以实现的,但需要认为实现。通过DataView来实
DataView dv = DataTable.DefaultView //获取数据视图
通过dv.Sort方式来实现排序
在CellValueNeeded事件中加载视图的数据
e.Value = dv[e.RowIndex]["列"]
通过ColumnHeaderMouseClick事件来处理列标头的样式
参考代码
DataView dv = DataTable.DefaultView //获取数据视图
通过dv.Sort方式来实现排序
在CellValueNeeded事件中加载视图的数据
e.Value = dv[e.RowIndex]["列"]
通过ColumnHeaderMouseClick事件来处理列标头的样式
参考代码
//我的DataGridView一共8列,第一列为序号列无需排序
void dgvList_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (this.dv.Table == null)
return;
if (this.dv.Table.Rows.Count > 0)
{
switch (e.ColumnIndex)
{
case 0:
break;
case 1:
this.ColumnHeaderOperate(this.dgvList.Columns[1].HeaderCell, "gdkh", 1);
break;
case 2:
this.ColumnHeaderOperate(this.dgvList.Columns[2].HeaderCell, "gdxm", 2);
break;
case 3:
this.ColumnHeaderOperate(this.dgvList.Columns[3].HeaderCell, "cyltggs", 3);
break;
case 4:
this.ColumnHeaderOperate(this.dgvList.Columns[4].HeaderCell, "zzltgbbl", 4);
break;
case 5:
this.ColumnHeaderOperate(this.dgvList.Columns[5].HeaderCell, "yybmc", 5);
break;
case 6:
this.ColumnHeaderOperate(this.dgvList.Columns[6].HeaderCell, "yybdz", 6);
break;
case 7:
this.ColumnHeaderOperate(this.dgvList.Columns[7].HeaderCell, "yyblxdh", 7);
break;
default:
break;
}
}
}
/// <summary>
/// 处理列表头点击排序
/// </summary>
/// <param name="dgvColumnHeader">控件列表头</param>
/// <param name="strColumnName">列的名称</param>
/// <param name="nIndex">列的索引</param>
private void ColumnHeaderOperate(DataGridViewColumnHeaderCell dgvColumnHeader, string strColumnName, int nIndex)
{
switch (dgvColumnHeader.SortGlyphDirection)
{
case SortOrder.None:
this.dv.Sort = strColumnName;
dgvColumnHeader.SortGlyphDirection = SortOrder.Ascending;
break;
case SortOrder.Ascending:
this.dv.Sort = strColumnName + " DESC";
dgvColumnHeader.SortGlyphDirection = SortOrder.Descending;
break;
case SortOrder.Descending:
this.dv.Sort = strColumnName;
dgvColumnHeader.SortGlyphDirection = SortOrder.Ascending;
break;
default:
break;
}
//一共8列,除了排序列,别的列标头恢复原始状态
for (int i = 0; i < 8; i++)
{
if (i != nIndex)
{
this.dgvList.Columns[i].HeaderCell.SortGlyphDirection = SortOrder.None;
}
}
this.dgvList.RowCount = this.dv.Table.Rows.Count;
this.dgvList.Refresh();
}