requiredfieldvalidator控件用来校验一个输入框中是否输入了值,regularexpressionvalidator控件用来进行正则表达是的匹配。关于正则表达式的说明请参阅其他资料.
其中controltovalidate属性就是需要校验的文本框的id号.标签中的文本就是在校验不成功的时候显示出来的提示,display属性则是提示信息的显示方式.
datagrid中<columns>标签内的内容就是datagrid的列了,列中还可以添加模版列,对应每一模版列,可以有<itemtemplate>,<edititemtemplate>,<headertemplate>,<footertemplate>几个标签,其中<itemtemplate>就是datagrid在正常显示的时候列的标签了,<edittemplate>也就是在编辑状态中的datagrid列的样式了.
在这些标签中我们可以插入控件,然后在后台代码中用datagrid1.item[i].findcontrols(“coltrol name”)可以对datagrid中的控件进行操作.
为了在datageid为编辑状态的时候控制datagrid包含控件的状态,我们可以用css样式定义,将下面代码加入aspx文件的</head>和<body>中,然后在<asp:textbox>标签中加入cssclass=“myclass“即可改片控件的样式。(跟普通的方法没什么区别啦,呵呵。)
<style type="text/css">.mytextbox { border-right: #000000 1px solid; border-top: #000000 1px solid; font-size: 9pt; border-left: #000000 1px solid; width: 80px; border-bottom: #000000 1px solid; height: 20px }
</style>
这里只给出了部分代码,如需要完整代码,请来信索取。cheaper_c@sina.com
———————————————————-下面是运行时屏幕接图—————————————–
————————————————部分后台代码———————————————————
private new void databind()
{
databind("au_fname");
}
//重载databind()方法,方便datagrid中进行排序
private void databind(string sortfield)
{
ds = new dataset();
da = new sqldataadapter("select * from authors_new",conn);
da.fill(ds,"authors");
dataview source = ds.tables["authors"].defaultview;
source.sort = sortfield;
datagrid1.datasource = source;
datagrid1.databind();
sqldataadapter ddl_da = new sqldataadapter("select distinct state from authors_new",conn);
ddl_da.fill(ddl_table);
regclientscript();
}
//这段方法参照了vzxq兄的《在datagrid页眉上添加全选的checkbox控件》一文
//原文地址: http://blog.csdn.net/vzxq/archive/2004/09/13/103156.aspx
private void regclientscript()
{
//对于datagrid1.controls[0],大家可以参看vzxq兄的另一篇文章
//http://blog.csdn.net/vzxq/archive/2004/09/13/103167.aspx
foreach (datagriditem item in datagrid1.controls[0].controls)
{
if (item.itemtype == listitemtype.header)
{
checkbox chkall=(checkbox)item.findcontrol("chkall");
system.text.stringbuilder strscript = new system.text.stringbuilder("<script language=javascript> \n");
strscript.append(" function checkstatus() { \n");
strscript.append(" var ball = true; \n");
strscript.append(" ball = document.all(" + chkall.clientid + ").checked; \n");
for(int i=0; i<datagrid1.items.count ; i++)
{
strscript.append(" document.all(" + datagrid1.items[i].cells[0].findcontrol("checkbox1").clientid + ").checked = ball; \n");
}
strscript.append(" } \n");
strscript.append("</script> \n");
if(!page.isclientscriptblockregistered("checkstatus"))
page.registerclientscriptblock("checkstatus",strscript.tostring());
chkall.attributes.add("onclick","checkstatus()");
break;
}
}
}
//当点击”编辑”按钮的时候触发的服务器端函数
//首先将panel的visible属性设置为false,因为当datagrid在编辑状态时单元格中的控件(如textbox)会将datageid撑宽
//挤到我们添加记录的panel就不好看了.
public void grid_edit(object sender, system.web.ui.webcontrols.datagridcommandeventargs e)
{
panel1.visible = false;
datagrid1.edititemindex = (int)e.item.itemindex;
databind();
system.web.ui.webcontrols.dropdownlist ddl_state = (dropdownlist)datagrid1.items[(int)e.item.itemindex].findcontrol("edit_state");
ddl_state.datasource = ddl_table.defaultview;
ddl_state.datatextfield = "state";
ddl_state.databind();
for(int i=0;i<ddl_table.rows.count;i++)
{
if(((label)e.item.findcontrol("lbl_state")).text==ddl_table.rows[i][0].tostring())
{
//这段代码的作用是对编辑状态中的datagrid中的控件附值.ddl_table就是前面我们创建的datatable
ddl_state.selectedindex = i;
break;
}
}
}
//取消datagrid编辑状态的时候触发的服务器端代码
public void grid_cancel(object sender, system.web.ui.webcontrols.datagridcommandeventargs e)
{
panel1.visible = true;//将panel显示出来
datagrid1.edititemindex = -1;
this.databind();
}
//点击”更新”按钮是触发的函数,更新数据库中的记录
public void grid_update(object sender, system.web.ui.webcontrols.datagridcommandeventargs e)
{
int pageindex = datagrid1.currentpageindex;
sqlcommand cmd = new sqlcommand();
cmd.commandtext = "update authors_new set au_id=@au_id, au_lname=@au_lname, au_fname=@au_fname, phone=@phone, address=@address, state=@state, zip=@zip, city=@city, contract=@contract where au_id = @au_id";
cmd.parameters.add(new sqlparameter("@au_id",sqldbtype.varchar,11));
cmd.parameters["@au_id"].value = e.item.cells[1].text;
cmd.parameters.add(new sqlparameter("@au_lname",sqldbtype.varchar,40));
cmd.parameters["@au_lname"].value = ((textbox)e.item.findcontrol("edit_lname")).text;
cmd.parameters.add(new sqlparameter("@au_fname",sqldbtype.varchar,20));
cmd.parameters["@au_fname"].value = ((textbox)e.item.findcontrol("edit_fname")).text;
cmd.parameters.add(new sqlparameter("@phone",sqldbtype.char,12));
cmd.parameters["@phone"].value = ((textbox)e.item.findcontrol("edit_phone")).text;
cmd.parameters.add(new sqlparameter("@address",sqldbtype.varchar,40));
cmd.parameters["@address"].value = ((textbox)e.item.findcontrol("edit_address")).text;
cmd.parameters.add(new sqlparameter("@state",sqldbtype.varchar,40));
cmd.parameters["@state"].value = ((dropdownlist)e.item.findcontrol("edit_state")).selecteditem.value;
cmd.parameters.add(new sqlparameter("@zip",sqldbtype.char,5));
cmd.parameters["@zip"].value = ((textbox)e.item.findcontrol("edit_zip")).text;
cmd.parameters.add(new sqlparameter("@city",sqldbtype.varchar,20));
cmd.parameters["@city"].value = ((textbox)e.item.findcontrol("edit_city")).text;
cmd.parameters.add(new sqlparameter("@contract",sqldbtype.char,1));
if(((checkbox)e.item.findcontrol("edit_contract")).checked)
{
cmd.parameters["@contract"].value = "1";
}
else
{
cmd.parameters["@contract"].value = "0";
}
cmd.connection = conn;
try
{
conn.open();
cmd.executenonquery();
conn.close();
}
catch(exception ex)
{
label1.text = ex.message.tostring();
}
finally
{
cmd.dispose();
}
datagrid1.edititemindex = -1;
databind();
panel1.visible = true;
datagrid1.currentpageindex = pageindex;
}
//排序
public void grid_sort(object sender, system.web.ui.webcontrols.datagridsortcommandeventargs e)
{
databind(e.sortexpression);
}
//分页
public void grid_page(object sender, system.web.ui.webcontrols.datagridpagechangedeventargs e)
{
datagrid1.edititemindex = -1;
panel1.visible = true;
datagrid1.currentpageindex = e.newpageindex;
databind();
}
//向数据库中插入记录
private void button2_click(object sender, system.eventargs e)
{
sqlcommand cmd = new sqlcommand();
cmd.commandtext= "insert into authors_new (au_id, au_lname, au_fname, phone, address, state, zip, city, contract) values (@au_id, @au_lname, @au_fname, @phone, @address, @state, @zip, @city, @contract)";
cmd.parameters.add(new sqlparameter("@au_id",sqldbtype.varchar,11));
cmd.parameters["@au_id"].value = txt_id.text;
cmd.parameters.add(new sqlparameter("@au_lname",sqldbtype.varchar,40));
cmd.parameters["@au_lname"].value = txt_lname.text;
cmd.parameters.add(new sqlparameter("@au_fname",sqldbtype.varchar,20));
cmd.parameters["@au_fname"].value = txt_fname.text;
cmd.parameters.add(new sqlparameter("@phone",sqldbtype.char,12));
cmd.parameters["@phone"].value = txt_phone.text;
cmd.parameters.add(new sqlparameter("@address",sqldbtype.varchar,40));
cmd.parameters["@address"].value = txt_address.text;
cmd.parameters.add(new sqlparameter("@state",sqldbtype.varchar,40));
cmd.parameters["@state"].value = txt_state.text;
cmd.parameters.add(new sqlparameter("@zip",sqldbtype.char,5));
cmd.parameters["@zip"].value = txt_zip.text;
cmd.parameters.add(new sqlparameter("@city",sqldbtype.varchar,20));
cmd.parameters["@city"].value = txt_city.text;
cmd.parameters.add(new sqlparameter("@contract",sqldbtype.char,1));
if(chk_contract.checked)
{
cmd.parameters["@contract"].value = "1";
}
else
{
cmd.parameters["@contract"].value = "0";
}
cmd.connection = conn;
try
{
conn.open();
cmd.executenonquery();
conn.close();
}
catch(exception ex)
{
label1.text = ex.message.tostring();
}
finally
{
cmd.dispose();
}
databind();
}
———————————————————-部分前台代码———————————————————————–
<asp:datagrid id="datagrid1" oneditcommand="grid_edit" oncancelcommand="grid_cancel" onupdatecommand="grid_update" autogeneratecolumns="false" allowsorting="true" onpageindexchanged="grid_page" onsortcommand="grid_sort" allowpaging="true">
<columns>
<asp:templatecolumn>
<headertemplate>
<asp:checkbox id="chkall" runat="server"></asp:checkbox>全选
</headertemplate>
<itemtemplate>
<asp:checkbox id="checkbox1" runat="server"></asp:checkbox>
</itemtemplate>
</asp:templatecolumn>
<asp:boundcolumn visible="false" datafield="au_id" readonly="true"></asp:boundcolumn>
<asp:templatecolumn sortexpression="phone" headertext="电话">
<itemtemplate>
<asp:label runat="server" text=<%# databinder.eval(container.dataitem,"phone")%>>
</asp:label>
</itemtemplate>
<edititemtemplate>
<asp:textbox cssclass="mytextbox" runat="server" id="edit_phone" text=<%# databinder.eval(container.dataitem, "phone")%>>
</asp:textbox>
<asp:requiredfieldvalidator id="phonereqval" runat="server" controltovalidate="edit_phone" display="dynamic">*</asp:requiredfieldvalidator>
<asp:regularexpressionvalidator id="phoneregval" runat="server" controltovalidate="edit_phone" display="dynamic"
validationexpression="[0-9]{3} [0-9]{3}-[0-9]{4}">*电话号码格式xxx xxx-xxxx</asp:regularexpressionvalidator>
</edititemtemplate>
</asp:templatecolumn>
</columns>
<pagerstyle horizontalalign="center" forecolor="white" backcolor="#000084" mode="numericpages"></pagerstyle>
</asp:datagrid>
