从服务器端获取到查询的数据,可能是DataTable类型的,也有可能是IList<Bean>类型的
所以也就有两种给gridview赋值的方式
一.获取到的是一个datatable的数据,此时gridview列中的DataPropertyName属性跟datatable中的列名应该是一一对应的
private void setGridViewDt(GridView _gdv,DataTable _dt){
_gdv.Rows.Clear();//先清空gridview中行的数据
foreach(DataRow dr in _dt.Rows){
int index=_gdv.Rows.Add(new DataGridViewRow());//datarow中每有一行,便给gridview中也添加一行,这里的index是递增的
foreach(DataGridViewColumn col in _gdv.Columns){
if(!string.IsNullOrEmpty(col.DataProperty)){
_gdv.Rows[index].Cells[col.Name].Value=dr[col.DataProperty];//把datatable中对应的那行的,col.DataProperty列的数据传给gridview中的这一行的col列
}
//每一列的checkbox的属性还要默认为false
_gdv.Rows[index].Cells[0].Value=false;
}
}
二.获取到的是一个IList<Bean>类型的数据
private void setGridViewList(GridView _gdv,IList<Bean> list){
_gdv.Rows.Clear();
_gdv.DataSource=new BindingList<Bean>(list);//把IList封装成BindingList,这两个有本质的区别
for(int index=0;index<_gdv.Rows.Count;index++){
//每一列的checkbox的属性还要默认为false
_gdv.Rows[index].Cells[0].Value=false;
}
}
这边实体Bean里面的各属性要跟GridView里面列的DataProperty属性要是对应的(名字相同),如果没有对应的话,gridview的那一列会为空,然后在旁边会多出bean的一个属性的列
有的时候Bean里面的属性比我们要用在gridview里面的属性多一些,如果不在gridview中添加对应的列(且要设置对应的DataProperty),那些属性就会作为gridview的列多在旁边
我们可以这样设置:
1.在gridview中添加对应的列
2.设置列的DataProperty属性跟Bean的多出来的属性名相同
3.将列的visiable属性设置为false
这样应该就可以了
服务器一般传过来的不会直接是IList<Bean>类型的数据,可能会传过来一个json类型的字符串
JavaScriptSerializer _serializer=new JavaScriptSerializer();
var list=_serializer.Deserialize<IList<Bean>>(json);//支持泛型的
//将对象转化成json字符串
List<Bean> list=new List<Bean>();
Bean bean=new Bean();
bean.A="aaa"
list.Add(bean);
string jsonstring=_serializer.Serialize(list);
所以也就有两种给gridview赋值的方式
一.获取到的是一个datatable的数据,此时gridview列中的DataPropertyName属性跟datatable中的列名应该是一一对应的
private void setGridViewDt(GridView _gdv,DataTable _dt){
_gdv.Rows.Clear();//先清空gridview中行的数据
foreach(DataRow dr in _dt.Rows){
int index=_gdv.Rows.Add(new DataGridViewRow());//datarow中每有一行,便给gridview中也添加一行,这里的index是递增的
foreach(DataGridViewColumn col in _gdv.Columns){
if(!string.IsNullOrEmpty(col.DataProperty)){
_gdv.Rows[index].Cells[col.Name].Value=dr[col.DataProperty];//把datatable中对应的那行的,col.DataProperty列的数据传给gridview中的这一行的col列
}
//每一列的checkbox的属性还要默认为false
_gdv.Rows[index].Cells[0].Value=false;
}
}
二.获取到的是一个IList<Bean>类型的数据
private void setGridViewList(GridView _gdv,IList<Bean> list){
_gdv.Rows.Clear();
_gdv.DataSource=new BindingList<Bean>(list);//把IList封装成BindingList,这两个有本质的区别
for(int index=0;index<_gdv.Rows.Count;index++){
//每一列的checkbox的属性还要默认为false
_gdv.Rows[index].Cells[0].Value=false;
}
}
这边实体Bean里面的各属性要跟GridView里面列的DataProperty属性要是对应的(名字相同),如果没有对应的话,gridview的那一列会为空,然后在旁边会多出bean的一个属性的列
有的时候Bean里面的属性比我们要用在gridview里面的属性多一些,如果不在gridview中添加对应的列(且要设置对应的DataProperty),那些属性就会作为gridview的列多在旁边
我们可以这样设置:
1.在gridview中添加对应的列
2.设置列的DataProperty属性跟Bean的多出来的属性名相同
3.将列的visiable属性设置为false
这样应该就可以了
服务器一般传过来的不会直接是IList<Bean>类型的数据,可能会传过来一个json类型的字符串
可以用JavaScriptSerializer 来解析,当然其也可以将对象转成json字符串
1.首先要引用库文件System.Web.Extensions
2.使用命名空间System.Web.Script.Serialization
JavaScriptSerializer _serializer=new JavaScriptSerializer();
var list=_serializer.Deserialize<IList<Bean>>(json);//支持泛型的
//将对象转化成json字符串
List<Bean> list=new List<Bean>();
Bean bean=new Bean();
bean.A="aaa"
list.Add(bean);
string jsonstring=_serializer.Serialize(list);