需求:
1.一个GRIDVIEW,有多列! 其中有三列是:身份证号,工号,姓名。这三列都是模板列,放有TEXTBOX。2.查询出的员工信息显示在这个GRIDVIEW中,3.在表格外面,有个按钮“增加一行”。点击此按钮,就在GRIDVIEW底部出现一空行!4.在空行的列:身份证号,工号,姓名的文本框中,可以输入信息,例如输入工号,则根据工号带出员工信息。实现要求:
1.添加空行要求只刷新表格! 不刷新整个页面!另外:我用JS实现过,就是获取页面上的表格,再添加一个<TR>...</TR>. 获取员工信息,也是采用JS。但其维护性,可扩展性不好! 因为,如果要求在某列前再添加一列信息,那么之前定义的obj.rows[i].cells[j]都变了!都得改! 太烦了!
所以特此发贴,高分求行之有效的方法! 谢谢!!!
1.一个GRIDVIEW,有多列! 其中有三列是:身份证号,工号,姓名。这三列都是模板列,放有TEXTBOX。2.查询出的员工信息显示在这个GRIDVIEW中,3.在表格外面,有个按钮“增加一行”。点击此按钮,就在GRIDVIEW底部出现一空行!4.在空行的列:身份证号,工号,姓名的文本框中,可以输入信息,例如输入工号,则根据工号带出员工信息。实现要求:
1.添加空行要求只刷新表格! 不刷新整个页面!另外:我用JS实现过,就是获取页面上的表格,再添加一个<TR>...</TR>. 获取员工信息,也是采用JS。但其维护性,可扩展性不好! 因为,如果要求在某列前再添加一列信息,那么之前定义的obj.rows[i].cells[j]都变了!都得改! 太烦了!
所以特此发贴,高分求行之有效的方法! 谢谢!!!
解决方案 »
- 求真实姓名的正则表达式?【汉字或者英文】
- 谁比较了解trust level
- 我应该把代码放在哪个事件里面?
- 想找些人交流asp.net愿意的话加群5453247
- 怎么让Substring不截断Html代码?
- 鼠标双击asp.net TreeView控件的列表时,自动展开,如何写?
- asp.net新手关于asp.net官方提供的论坛源码出错的问题
- 痛苦啊,控件对齐,难道真的不如borland
- dataGrid的问题?(我仅有的10分)
- 脚本出错,帮我看一下吧!
- 如何实现页面加载数据时的等待效果?
- 做一个在线考试系统,可是不知道答案如果保存。保存到那里。是数据库里,还是COOKIES。做完后如何评分。希望大家能给个思路或者代码。谢谢
不是用js的,
我是在服务器端做的,然后用updatePanel包住gridview就可以不刷屏了.
具体方法:1.点击"增加一行"按钮,回到服务器端,将gridview的数据读入datatable,然后datatable增加一行,不填数据,然后重新绑定到gridview.搞掂.
设置GridView1的ShowFooter为true
在GridView的FooterRow中添加TextBox或Label和按钮!无刷新:简单的用UpdatePanel
var newTd0 = newTr.insertCell();
....
就算加上去也麻烦。你可以将添加数据的界面放在一个div里面。点击新增的时候就把它显示,
保存的时候就隐藏掉。再重新调用绑定数据的方法
你这种方法也可以在DIV中放一个同员工信息表格一样的表格,这个DIV表格只有一空行!但这样做和在现有表格底部添加一空行有何异呢?
好象也没特别好的方法!!
你可以在FooterRow中添加任何东西!就像模板列,事实上就是模板列!!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT=""> <script>
function addTR(id){
var tb=document.getElementById(id);
if(tb&&tb.rows[0]){
var tr=tb.rows[0].cloneNode(true); var els=tr.getElementsByTagName('input'); for(var i=0,len=els.length;i<len;i++){
if(els[i].type=='text'){
els[i].value='';
}
} tb.rows[0].parentNode.appendChild(tr);
}
}
window.onload=function(){
document.getElementById('btn1').onclick=function(){addTR('tb1');}
document.getElementById('btn2').onclick=function(){addTR('tb2');}
}
</script>
</HEAD> <BODY>
我是Table1
<table id='tb1'>
<tr>
<td><input type='text' value='1' /></td> <td><input type='text' value='2' /></td>
</tr>
<tr>
<td><input type='text' value='11' /></td> <td><input type='text' value='22' /></td>
</tr>
</table>
我是Table2
<table id='tb2'>
<tr>
<td><input type='text' value='1' /></td> <td><input type='text' value='2' /></td><td><input type='text' value='3' /></td> <td><input type='text' value='4' /></td>
</tr>
<tr>
<td><input type='text' value='11' /></td> <td><input type='text' value='22' /></td> <td><input type='text' value='33' /></td> <td><input type='text' value='44' /></td>
</tr>
</table>
<input type='button' id='btn1' value='为Table1增加一行' />
<input type='button' id='btn2' value='为Table2增加一行' /> </BODY>
</HTML>
var cell1=row.insertCell();
cell1.innerHTML=" <input type='text' id='txt'>";
我决定先试试这个方法!
但使用FootTemplate后,还能显示统计吗? 哈
本来FootTemplate中是放有统计值的! 谢谢!!! 试了之后,我再把结果告诉大家!
你可以定义一个funtion
按列名返回"j"
function ReturnRowObj(ObjName, Row, Dg)//返回要选择列名的列号
{
//ObjName 列名
//Row 哪一行
//Dg 在哪个table上
var ObjCells = -1;
var LenC = Dg.rows[Row].cells.length;
for (var i = 0; i < LenC; i++) {
if (Dg.rows[Row].cells[i].firstChild.id == ObjName) {
ObjCells = i;
break;
}
}
return ObjCells;
}
同意你的观点。另外,用Footer的话,如果要增加两个以上怎么办?
不过FootTemplate是模板列,一个模板列完全可加n个控件,
唯一需要设置处理的是什么情况下不显示,什么情况下显示
你可以定义一个funtion
按列名返回"j"
function ReturnRowObj(ObjName, Row, Dg)//返回要选择列名的列号
{
//ObjName 列名
//Row 哪一行
//Dg 在哪个table上
var ObjCells = -1;
var LenC = Dg.rows[Row].cells.length;
for (var i = 0; i < LenC; i++) {
if (Dg.rows[Row].cells[i].firstChild.id == ObjName) {
ObjCells = i;
break;
}
}
return ObjCells;
}用法:
var Grid=document.getElementById('Dg_PO');
Grid.rows[2].cells[ReturnRowObj("数量", 2, Grid)].firstChild.value
//返回'Dg_PO'的第2行'数量'所在的列的第一个控制值
使用FOOTROW试了一下,发现我的显示,隐藏FOOTROW按钮非得点击两次才有效!
显示的就是设置SHOWFOOTER = TRUE,隐藏的代码就是SHOWFOOTER=FALSE;
为啥非要点击两次! 谢谢!!!
能说具体点吗
以消除你对
GridView1.ShowFooter = true;
或
GridView1.ShowFooter = false;
的怀疑!!
注意,如果是代码绑定的话,不要忘了执行以上语句后,数据要绑定!!
你的意思是说执行GridView1.ShowFooter = true后,要写数据绑定语句?
如:
(info是一个ILIST,放在VIEWSTATE里)this.dg.datasource = this.info;
this.dg.databind();但是为什么我单独测试,又不会呢! 哈这一步我先跳过! 继续试验下面的操作!
InsertItemPosition="LastItem"
DataSourceID="SqlDataSource2"
>
<ItemTemplate>
<tr style="border:1px solid #eee">
<td style="border:1px solid #eee; width:25%">
<asp:Label ID="PK_TYPE_IDLabel" runat="server"
Text='<%# Eval("PK_TYPE_ID") %>' />
</td>
<td style="border:1px solid #eee; width:50%;">
<asp:Label ID="NAMELabel" runat="server" Text='<%# Eval("NAME") %>' />
</td>
<td style="border:1px solid #eee; width:25%">
<asp:LinkButton ID="EditButton" runat="server" CommandName="Edit">编辑</asp:LinkButton>  
<%-- <asp:Button ID="" runat="server" CommandName="Edit" Text="" CssClass="ImgBtn"/>
<asp:Button ID="DeleteButton" runat="server" CommandName="Delete" OnClientClick="return confirm('您确认删除该记录吗?')" Text="删除" CssClass="ImgBtn"/>--%>
<asp:LinkButton ID="DeleteButton" runat="server" CommandName="Delete" OnClientClick="return confirm('您确认删除该记录吗?')">删除</asp:LinkButton>
</td>
</tr>
</ItemTemplate>
<EmptyDataTemplate>
<table runat="server" style="">
<tr>
<td>
未返回数据。</td>
</tr>
</table>
</EmptyDataTemplate>
<InsertItemTemplate>
<tr style="">
<td style="border:1px solid #eee;width:25%">
<asp:Label ID="PK_TYPE_IDTextBox" runat="server"
Text="此处自动生成" />
</td>
<td style="border:1px solid #eee;width:50%">
<asp:TextBox ID="NAMETextBox" MaxLength="15" runat="server" Text='<%# Bind("NAME") %>' Width="90%" style="word-wrap: break-word; word-break: break-all;"/>
</td>
<td style="border:1px solid #eee;width:25%">
<asp:LinkButton ID="InsertButton" runat="server" CommandName="Insert">插入</asp:LinkButton>  
<asp:LinkButton ID="CancelButton" runat="server" CommandName="Cancel" >清除</asp:LinkButton>
<%-- <asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="插入" CssClass="ImgBtn"/>
<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="清除" CssClass="ImgBtn"/>--%>
</td>
</tr>
</InsertItemTemplate>
<LayoutTemplate>
<table runat="server" width="80%">
<tr runat="server" style="border:1px solid #eee">
<td runat="server" style="border:1px solid #eee">
<table ID="itemPlaceholderContainer" runat="server" border="1" width="100%" style="background-color: #FFFFFF;border-collapse: collapse;border-color: #999999;border-style:none;border-width:1px;font-family: Verdana, Arial, Helvetica, sans-serif; border:1px solid #eee">
<tr runat="server" style="border:1px solid #eee">
<th runat="server" style="border:1px solid #eee">
类别ID</th>
<th runat="server" style="border:1px solid #eee">
类别名称</th>
<th id="Th1" runat="server" style="border:1px solid #eee">
操作
</th>
</tr>
<tr ID="itemPlaceholder" runat="server">
</tr>
</table>
</td>
</tr>
</table>
</LayoutTemplate>
<EditItemTemplate>
<tr style="border:1px solid #eee">
<td style="border:1px solid #eee;width:25%">
<asp:Label ID="PK_TYPE_IDLabel1" runat="server"
Text='<%# Eval("PK_TYPE_ID") %>' />
</td>
<td style="border:1px solid #eee;width:50%">
<asp:TextBox ID="NAMETextBox" runat="server" MaxLength="15" Text='<%# Bind("NAME") %>' style="word-wrap: break-word; word-break: break-all;" Width="90%"/>
</td>
<td style="border:1px solid #eee;width:25%">
<asp:LinkButton ID="UpdateButton" runat="server" CommandName="Update">更新</asp:LinkButton>  
<asp:LinkButton ID="CancelButton" runat="server" CommandName="Cancel">取消</asp:LinkButton>
<%-- <asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="更新" CssClass="ImgBtn"/>
<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="取消" CssClass="ImgBtn"/>--%>
</td>
</tr>
</EditItemTemplate>
</asp:ListView>
我会尝试用一下! 但是,由于我们现在系统里用的都是我们包装好了的GRIDVIEW, 我这次算是属于重构一下!
暂时系统里不准备使用LISTVIEW,但如果LISTVIEW在添加空行方便如何便捷,将不排除往后的需求中引进。
1.使用JS写表格行对象的HTML.
评价:这种方法脚本代码量大,可维护性,可扩展性差!
2.使用GRIDVIEW的FOOTROW.
评价:这种方法适用于表格中的多列需要输入信息.实现起来有小小复杂,特别是如果还有多列统计列!
3.使用LISTVIEW数据控件
评价:据说这种方法很方便添加新行,但我没试过
4.使用DIV将要输入的信息列示成标签和输入控件.在DIV中输入的数据再绑定到GRIDVIEW中.
评价:这种方法适用于大部分的场景,实现简单,方便,快捷!一般其要求表格中需求可输入列在少量.我现在是采用了第四种方法! 第四种方法加上AJAX的局部刷新技术,可以达到很好的效果! 谢谢!!!