积极答复者
gridview 排序

问题
-
我的gridview绑定一个datatable,datatable中有一列是int型的 排序的时候改怎么办?现在的状况是排序的时候总是以string的形式排序的,int型该怎么处理呢?
- 已移动 肖小勇Moderator 2010年4月22日 10:28 asp.net 相关问题 (发件人:.NET Framework 一般性问题讨论区)
答案
-
count(employeeName) 读取出来的字段应该是 int32 这是没有问题的。
dataRow["CountAll"] = Convert.ToInt32('01'); CountAll 列的类型是与 DataColumn 的 DataType 有关,与值无关。
如果 CountAll 是字符型,这个表达式等同于 dataRow["CountAll"] = Convert.ToInt32('01').ToString();
我写了个示例你对比一下,如果还不能解决你的问题,请把你的 SQL 与代码发出来。
<%@ Page Language="C#" AutoEventWireup="true" %> <%@ Import Namespace="System.Data" %> <script runat="server"> protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(Int32)); dt.Columns.Add("Name", typeof(string)); dt.Rows.Add(new object[] { 0, "" }); dt.Rows.Add(new object[] { 1, ""}); dt.Rows.Add(new object[] { 2, "" }); dt.Rows.Add(new object[] { 10, "" }); dt.Rows.Add(new object[] { 1000, "" }); dt.Rows.Add(new object[] { 500, "" }); DataView dv = dt.DefaultView; dv.Sort = "Id desc"; this.GridView1.DataSource = dv; this.GridView1.DataBind(); } </script> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" > <Columns> <asp:BoundField DataField="Id" HeaderText="Id" > </asp:BoundField> <asp:BoundField DataField="Name" HeaderText="Name" > </asp:BoundField> </Columns> </asp:GridView> </form> </body> </html>
知识改变命运,奋斗成就人生!- 已标记为答案 heartg 2010年4月23日 2:54
全部回复
-
我这么修改过,可是它还是把数值按照string排序的方式给排序了
首先我的datatable是多个datatable合并的,绑定到gridview后,想里面的其中departmentName和countAll 2列进行排序,departmentName可以正确的排序,可是int型的countAll还是按照string型排序。我一开始担心countAll这列可能类型有问题,就在合并的时候把这一列转换为int型的,Convert.toInt16(dt.Rows[i]["countAll"])。然后
DataView dv = dt.DefaultView;
dv.Sort = sort + " " + order;
dt = dv.ToTable();GridView2.DataSource = dt;
GridView2.DataBind();
其中的sort=“countAll” order=“asc”,这样排序的结果还是string型的排序
这个要怎么处理dt中的countAll这列呢?
countAll这列是以下面的形式出现的
0
0
10
10
11
11
12
8
9
-
count(employeeName) 读取出来的字段应该是 int32 这是没有问题的。
dataRow["CountAll"] = Convert.ToInt32('01'); CountAll 列的类型是与 DataColumn 的 DataType 有关,与值无关。
如果 CountAll 是字符型,这个表达式等同于 dataRow["CountAll"] = Convert.ToInt32('01').ToString();
我写了个示例你对比一下,如果还不能解决你的问题,请把你的 SQL 与代码发出来。
<%@ Page Language="C#" AutoEventWireup="true" %> <%@ Import Namespace="System.Data" %> <script runat="server"> protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(Int32)); dt.Columns.Add("Name", typeof(string)); dt.Rows.Add(new object[] { 0, "" }); dt.Rows.Add(new object[] { 1, ""}); dt.Rows.Add(new object[] { 2, "" }); dt.Rows.Add(new object[] { 10, "" }); dt.Rows.Add(new object[] { 1000, "" }); dt.Rows.Add(new object[] { 500, "" }); DataView dv = dt.DefaultView; dv.Sort = "Id desc"; this.GridView1.DataSource = dv; this.GridView1.DataBind(); } </script> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" > <Columns> <asp:BoundField DataField="Id" HeaderText="Id" > </asp:BoundField> <asp:BoundField DataField="Name" HeaderText="Name" > </asp:BoundField> </Columns> </asp:GridView> </form> </body> </html>
知识改变命运,奋斗成就人生!- 已标记为答案 heartg 2010年4月23日 2:54
-
我的问题解决了
正如您说的,countAll这列的类型就没有弄对
private DataTable MergeDataTable(DataTable dt1, DataTable dt2, String KeyColName)
我在合并2个datatable的时候判断了一下,
{
DataTable dtReturn = new DataTable();
int i=0;
int j=0;
int k=0;
int colKey1=0;
int colKey2=0;
dtReturn.TableName = dt1.TableName;
for (i = 0; i < dt1.Columns.Count; i++)
{
if (dt1.Columns[i].ColumnName == KeyColName)
{
colKey1 = i;
}
dtReturn.Columns.Add(dt1.Columns[i].ColumnName);
}
for (j = 0; j < dt2.Columns.Count; j++)
{
if (dt2.Columns[j].ColumnName == KeyColName)
{
colKey2 = j;
}
else
{
if (dt2.Columns[j].ColumnName.ToString().Equals("countAll"))
{
dtReturn.Columns.Add(dt2.Columns[j].ColumnName, typeof(Int32));
}
else
{
dtReturn.Columns.Add(dt2.Columns[j].ColumnName);
}
}
}
for (i = 0; i < dt1.Rows.Count; i++)
{
DataRow dr;
dr = dtReturn.NewRow();
dtReturn.Rows.Add(dr);
}
for (i = 0; i < dt1.Rows.Count; i++)
{
int m = -1;
for (j = 0; j < dt1.Columns.Count; j++)
{
dtReturn.Rows[i][j] = dt1.Rows[i][j].ToString();
}
for (k = 0; k < dt2.Rows.Count; k++)
{
if (dt1.Rows[i][colKey1].ToString() == dt2.Rows[k][colKey2].ToString())
{
m = k;
}
}
if (m != -1)
{
for (int x = 0; x < dt2.Columns.Count; x++)
{
if (x != colKey2)
{
dtReturn.Rows[i][j] = dt2.Rows[m][x];
j++;
}
}
}
}
return dtReturn ;
}
if (dt2.Columns[j].ColumnName.ToString().Equals("countAll")) { dtReturn.Columns.Add(dt2.Columns[j].ColumnName, typeof(Int32)); }
增加countAll这列的时候直接把类型定义好了就ok了
多谢您的指导,谢谢