日期:2014-05-20  浏览次数:20889 次

DataGridView的列顺序为何总是乱(高分)
在设计时给列已排好的顺序,但运行时显示列乱七八糟,前面到了后面,后面到了前面,不知怎么办?

------解决方案--------------------
你是否在设计的时候指定的列数量与SQL查询回来的列数量不符?


------解决方案--------------------
我每碰见过这种情况啊,代码?
------解决方案--------------------
代码呢?
------解决方案--------------------
你是自动生成列的吧,先看看代码?
------解决方案--------------------
先帮顶
------解决方案--------------------
up
------解决方案--------------------
可以先在界面上就给datagridview添加全部的可能出现的列。顺序这时候由你定。
等查询结果出来,绑定的时候给个循环,那些列要的就显示,那些列不要的就隐藏。这样绝对不会打乱顺序。

------解决方案--------------------
应该不会的
估计 是你没有把 自动生成列 设为false
------解决方案--------------------
自动绑定的数据源?
那么你是不知道到 数据 到底 有多少列了哦?

这样做 界面肯定会变形
最好是 确定好 数据返回的 列数
按列数 排列
不使用自动绑定 手动设置
------解决方案--------------------
你已经 自动绑定的数据源


手动绑定就OK

如果自动绑定 需要在SQL里 排好字段的顺序
------解决方案--------------------
up
------解决方案--------------------
贴上一下代码,不知道有没有帮助

主要的是最后几行的数据再绑定

private void setSort(DsList ds, string sDsNm, string sortKey, GridView gv)
{

DataSet dsWk = ds;

DataSet _Copyds = dsWk.Clone();

DataTable _Copydt = _Copyds.Tables[ "C_ANKEN "];

DataView dv = new DataView(dsWk.Tables[ "C_ANKEN "]);

string wkSort = " ";
string sView = sDsNm + "_ " + sortKey;

if (ViewState[sView] != null)
{
wkSort = ViewState[sView].ToString();
}

string sSort = " ";

if (wkSort.Equals( " asc "))
{
sSort = " desc ";
}
else
{
sSort = " asc ";
}

dv.Sort = sortKey + sSort;

foreach (DataRowView drv in dv)
{
_Copydt.ImportRow(drv.Row);
}

ds.Clear();

ds = (DsList)_Copyds.Copy();

ViewState[sDsNm] = ds;

ViewState[sView] = sSort;

gv.DataSource = ds.C_ANKEN;

gv.PageIndex = 0;

gv.DataBind();
}
------解决方案--------------------
up
------解决方案--------------------
问题很简单,就是在查询语句中不要使用select *,而是使用select field1,field2,field3 from table的方式,同时在datagridview的各列的排列顺序要和查询中field1,field2,field3的顺序完全一致,就不会出现各列顺序混乱的问题。