绑定列
<asp:boundcolumn
datafield="datetime" 字段名
headertext="时间" 列表头
headerimagerurl=""> 显示于列页眉中的图片,此图片会取代headertext的文本
</asp:boundcolumn>
如果“自动创建列”为true,则绑定列先显示,接着显示自动列,而且自动生成的列不会被加入到columns集合中。
超级链接列
<asp:hyperlinkcolumn
text="文本" //各列显示相同的文本,此时datatextfield优先
datatextfield="代码" //绑定的字段名
datatextformatstring="" //来自定义datatextfield的显示格式
navigateurl="url" //所有列使用同一url
datanavigateurlfield="codeid" //url字段变量,即传递的变量值,有时和datatextfield同
datanavigateurlformatstring="webform2.aspx?code={0}" url格式字符串,get方式传递的字符串
target="_blank" > //打开链接打开的位置或方式
</asp:hyperlinkcolumn>
按钮列
<columns>
普通按钮
<asp:buttoncolumn
text="所有列统一按钮名" //所有列统一按钮名
datatextfield="持股名称" //绑定字段
commandname="btn"> //
headertext="操作"> //列表头
</asp:buttoncolumn>
选择按钮
<asp:buttoncolumn
text="选择"
datatextfield="持股名称"
commandname="select">
</asp:buttoncolumn>
编辑按钮
<asp:editcommandcolumn
buttontype="linkbutton"
updatetext="更新"
canceltext="取消"
edittext="编辑">
</asp:editcommandcolumn>
删除按钮
<asp:buttoncolumn
text="删除"
buttontype="pushbutton"
commandname="delete">
</asp:buttoncolumn>
</columns>
commandname设置在datagrid1_itemcommand()事件中
获取同一行中哪个按钮被点击: string s=e.commandname;
//默认是linkbutton,也必须是linkbutton
单击按钮首先响应 datagrid1_itemcommand 事件
private void datagrid1_itemcommand(object source, system.web.ui.webcontrols.datagridcommandeventargs e)
{
tablerow tr=e.item; //得到操作的当前行,存入控件
string code=tr.cells[1].text; //丛控件再得到单元格的文本
string time=tr.cells[2].text;
tablecell cell1=e.item.cells[1]; //这样也可以取得单元格的值,存入控件
server.transfer("webform2.aspx?code="+code+" &or time="+time);
}
接着不同按钮响应不同事件:
编辑
private void datagrid1_editcommand(object source, system.web.ui.webcontrols.datagridcommandeventargs e)
{
this.datagrid1.edititemindex=e.item.itemindex;
this.datashow();
}
更新
private void datagrid1_updatecommand(object source, system.web.ui.webcontrols.datagridcommandeventargs e)
{
//得到主键列的值
int i=(int)this.datagrid1.datakeys[e.item.itemindex];
或 string ii=(string)this.datagrid1.datakeys[e.item.itemindex];
根据主键,用单元格的数据更新主键对应的纪录
//写update语句
}
取消
private void datagrid1_cancelcommand(object source, system.web.ui.webcontrols.datagridcommandeventargs e)
{
this.datagrid1.edititemindex=-1;
this.datashow();
}
注意:可以将主键绑定列设为只读;
删除
//应首先设置datakeyfield属性为主键列
private void datagrid1_deletecommand(object source, system.web.ui.webcontrols.datagridcommandeventargs e)
{
//得到主键列的值
int i=(int)this.datagrid1.datakeys[e.item.itemindex];
或 string ii=(string)this.datagrid1.datakeys[e.item.itemindex];
//写删除语句,
}
当在到服务器发送之间,在数据列表控件中选择不同的项时,引发 selectedindexchanged 事件
也可通过int i2 =(int)this.datagrid1.datakeys[this.datagrid1.selectedindex];得到主键值
datakeyfield 是一个字段,他的所有键值内容被填入datakeys集合中,通过datakeys[]来去某条记录的主键值
排序
指定默认排序 :
选择“自动创建列”true;
在“行为”部分,选择“允许排序”框。
在sortcommand 事件里,通过e.sortexpression对视图重新排序绑定。
(缺点:每一列都有“链接”按钮,)
指定自定义排序:
选择“自动创建列”false;
在需要排序的列,设置sortexpression
注意:没有排序表达式的列将不引发 sortcommand 事件,所以先设置排序表达式
private void datagrid1_sortcommand(object source, system.web.ui.webcontrols.datagridsortcommandeventargs e)
{
string sql="server=127.0.0.1;database=ltp;user id=sa;password=";
sqlconnection mycon=new sqlconnection(sql);
string selsql="select * from data";
sqldataadapter da=new sqldataadapter(selsql,mycon);
dataset ds=new dataset();
da.fill(ds,"data");
dataview dv= new dataview(ds.tables["data"]);
dv.sort= e.sortexpression.tostring(); //设置排序关键字
this.datagrid1.datasource=dv; //重新绑定
this.datagrid1.databind();
}
通过模版列来显示字段数据时,可以在模版列的<headertemplate>加控件来执行排序。
按钮的commandargument设置成 排序表达式,(为了sortcommand 事件能取到)
按钮的commandname="sort",务必小写
模版列
可以自行决定要在列中显示哪些控件(一个或多个),以及这些控件要绑定哪些字段。
加入模版列的按钮会将其click事件反升到datagrid1_itemcommand事件,但要判断commandname
编辑模版\里、直接把控件拖进去即可。
注意 如果您调用了父控件(datalist、repeater 或 datagrid 控件)的 databind 方法,itemcommand 事件将不会发生,原因是父控件的内容已经重置。因此,您通常不需要在每次往返时调用 databind 方法(即在初始化页时无需检查发回)。
<asp:templatecolumn>
<headertemplate>
<font face="宋体">模板列</font> //表头
</headertemplate>
<itemtemplate>
<asp:imagebutton id="imagebutton1" runat="server" imageurl="d:\img\image\button_add.gif">
</asp:imagebutton>
</itemtemplate>
<edititemtemplate>
//这一行是当选择编辑按钮时,显示的控件或文本
</edititemtemplate>
</asp:templatecolumn>
得到模版列中控件的值(datagrid1_itemcommand事件中)
dropdownlist listctr=(dropdownlist)e.item.findcontrol("dropdownlist2");
string s=listctr.selectedvalue;
checkbox box=(checkbox)e.item.findcontrol("checkbox1");
bool b=box.checked;