datagridview最后一行不排序
datagridview最后一行是新增的合计行,想一直留在最后,不要排序,前面的数据可以排序,大侠有解决的办法? --------------------编程问答-------------------- 列排序? 第一列不排序this.dataGridView1.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable; --------------------编程问答-------------------- 其他列排序的时候,最后一行还是参加了排序 --------------------编程问答-------------------- #region 定义排序变量
//泛型
List<object[]> lastRow = new List<object[]>();
//列索引
int colindex = 0;
//排序方式
string sort = " desc";
#endregion
#region 鼠标点击
private void d_ProductList_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
//判断行数大于0
if (e.RowIndex >= 0 || d_ProductList.Rows.Count == 0)
return;
//最后一行为0时
if (lastRow.Count == 0)
{
if (sort == " desc")
sort = " asc";
else
sort = " desc";
//当前点击的列
colindex = e.ColumnIndex;
//定义最后一行
int index = d_ProductList.Rows.Count - 1;
//把datagridview最后一行数据赋值给lastRow
lastRow.Add(_445188.Class.Common.CreateTable(((DataView)d_ProductList.DataSource)).Rows[index].ItemArray);
//移除最后一行
d_ProductList.Rows.Remove(d_ProductList.Rows[d_ProductList.Rows.Count - 1]);
}
}
#endregion
#region 排序方法
private void d_ProductList_Sorted(object sender, EventArgs e)
{
//最后一行为0则返回
if (lastRow.Count == 0)
return;
//ForbidSortColumn(d_ProductList,colindex);
//将datagridview的数据源转换成datatable
DataTable dt = _445188.Class.Common.CreateTable((DataView)d_ProductList.DataSource);
DataView dv = dt.DefaultView;
dv.Sort = dt.Columns[colindex].ColumnName+sort;
dt = dv.ToTable();
dt.Rows.Add(lastRow[0]);
lastRow.Clear();
//colindex = 0;
d_ProductList.DataSource = dt.DefaultView;
if (d_ProductList.Rows.Count > 0)//判断已经有行
{
//隐藏第一列
d_ProductList.Columns[0].Visible = false;
//给最后一行加背景色
d_ProductList.Rows[d_ProductList.Rows.Count - 1].DefaultCellStyle.BackColor = Color.Silver;
for (int i = 0; i < d_ProductList.Rows.Count; i++)
{
d_ProductList.Rows[i].Cells[1].Value = (i + 1).ToString();
}
}
}
#endregion --------------------编程问答-------------------- 给分吧lz,肯定能用,不能用,QQ找我,398075665 --------------------编程问答-------------------- #region 将对象类型DataView转换成DataTable
public static System.Data.DataTable CreateTable(DataView obDataView)
{
//判断DataView为null
if (null == obDataView)
{
throw new ArgumentNullException("DataView", "Invalid DataView object specified");
}
//定义datatable
System.Data.DataTable obNewDt = obDataView.Table.Clone();
//定义索引
int idx = 0;
//定义长度为DataTable列数的数据
string[] strColNames = new string[obNewDt.Columns.Count];
//将DataTable的列添加到数组中
foreach (DataColumn col in obNewDt.Columns)
{
strColNames[idx++] = col.ColumnName;
}
//定义非泛型
System.Collections.IEnumerator viewEnumerator = obDataView.GetEnumerator();
//循环
while (viewEnumerator.MoveNext())
{
//将非泛型中当前元素转换成DataView
DataRowView drv = (DataRowView)viewEnumerator.Current;
//新增行
DataRow dr = obNewDt.NewRow();
try
{
//将数组里的元素的值赋给新增行
foreach (string strName in strColNames)
{
dr[strName] = drv[strName];
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
//将新增行添加到DataTable中
obNewDt.Rows.Add(dr);
}
return obNewDt;
}
#endregion
补充:.NET技术 , ASP.NET