dt中是从数据库中查询到的数据例如select A,B,C from tablename
ASPxGridView1.DataSource = dt;
ASPxGridView1.DataBind();
ASPxGridView1.KeyFieldName = "keyfield";//设置KeyFieldName之后才能对其做相关的操作。
这样查询到的dt和ASPxGridView1中的Columns中的列是对应的,直接绑定就行,SQL语句中的列名要和添加Columns时候设置的FieldName相同才能绑定的上去。
但是有时候直接获取符合ASPxGridView中的列的SQL语句较有难度就推荐下方的方法2。
2.这样的适合比较复杂的GridView
创建两个DataTable dt1=new DataTable(); DataTable dt2=new DataTable();
ASPxGridView1 中的列来自不同的表 例如其中有5列 A,B,C,D,E,A,B,C列来自表table1,列D,E来自表table2
(table1 中列为ABC table2中表为ADE,其中table1.A与table2.A相关)
dt1中存从数据库table1中查询到的信息。得到dt1中包含(ABC)
dt2创建为和ASPxGridView所要求的列一样的DataTable,即列为A,B,C,D,E的DataTable
创建方法如下
typeof(类型)可以选择为需要的类型
dt2.Columns.Add("A", typeof(String));
dt2.Columns.Add("B", typeof(String));
dt2.Columns.Add("C", typeof(String));
dt2.Columns.Add("D", typeof(String));
dt2.Columns.Add("E", typeof(String));
然后循环dt1将dt1中的数据添加到dt2中
for (int I=0;i<dt1.Rows.Count;i++)
{
DataRow dr = dt2.NewRow();
dr["A"] = dt1.Rows[i]["A"];
dr["B"]=dt1.Rows[i]["B"];
dr["C"]=dt1.Rows[i]["C"];
dt2.Rows.Add(dr);
}
然后执行SQL语句将dt1中存入从数据库table2中的数据得到dt中包含(ADE),循环dt1将其新信息添加到dt2中
for (int I=0;i<dt1.Rows.Count;i++)
{
for (int j=0;j<dt2.Rows.Count;j++)
{
if (dt2.Rows[j]["A"]==dt1.Rows[i][A])
{
dt2.Rows[j]["D"]=dt1.Rows[i]["D"];
dt2.Rows[j]["E"]=dt1.Rows[i]["E"];
break;
}
}
}
利用如此方法得到处理后的dt2,将dt2绑定到ASPxGridView上面。除此之外,如果要对ASPxGridView做一些特殊处理,比如数据库中存储的是某些编码,在ASPxGridView中想要显示这些编码对应的文字也可以用该方法。
例如:
table1 字段 name type sex 张三 1 1
其中type=1想要显示为“学生”sex=1想要显示为“男”
用select * from table1得到的dt中数据是这样的
dt.Rows[0]["name"]="张三";
dt.Rows[0]["type"]="1";
dt.Rows[0]["sex"]="1";
直接绑定到ASPxGridView上的话显示的是 张三 1 1,但是想显示为 张三 学生 男 的话就可以对dt做些处理。
处理如下
for (int i=0;i<dt.Rows.Count;i++)
{
if (dt.Rows[i]["type"]=="1")
{dt.Rows[i]["type"]="学生")
}
if (dt.Rows[i]["sex"]=="1")
{dt.Rows[i]["sex"]="男")
}
}
这样处理过后的dt再绑定到ASPxGridView上就行了。总之是查询到数据之后可以对数据进行一些操作,如果一个DataTable不够用的话,可以申请多个进行处理,将DataTable处理为自己想要的样式再绑定。
除此之外还可以在绑定之后进行显示的时候进行更改,在ASPxGridView的操作中有个HtmlRowCreted,在这个事件中添加
protected void ASPxGridView1_HtmlRowCreated(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewTableRowEventArgs e)
{
// int i = e.VisibleIndex;
String type;
LiteralControl a_cell = new LiteralControl();
a_cell=(LiteralControl)e.Row.Cells[2].Controls[0];
type = a_cell.Text.ToString();
switch (type)
{
case "1":
a_cell.Text = "类型1";
break;
case "2":
a_cell.Text = "类型2";
break;
case "3":
a_cell.Text = "类型3";
break;
case "4":
a_cell.Text = "类型4";
break;
case "5":
a_cell.Text = "类型5";
break;
case "6":
a_cell.Text = "类型6";
break;
}
}
这样本来绑定的数据源中type这一项存储为1,2,3,4,5,6在这里进行了处理就会变成类型1,类型2,类型3,类型4,类型5,类型6