我有这个一个需要:
首先页面上一个Button按钮,Text为增加条件,目的是点击一下复制一行表格。
表格的第一行有5列:第一、二、四列是DropDownList,第三列是TextBox,第五列是一个Button,作用是删除当前的行。表格是先建立在页面上的,第一次加载只有一行,行中控件的数据是在Asp.net后台中用程序绑定的。我想当用户使用时点击一下增加条件的按钮,就多出一行,并同时设置需要的数据,这个功能我用JavaScript实行的,已经没有问题。但当我需要保存这个用户操作后的表格时,不管用户增加了多少行,我在后台代码中只能找到最开始的一行。
大概的问题我想应该是用JavaScript增加的行都是在客户端生成的,和我后台代码取表格的值那没有关联上。请问这个问题有什么好的解决办法????页面代码:
<INPUT id="B_AddQuery" style="WIDTH: 104px; HEIGHT: 24px" onclick="insertRow()" type="button"
value="增加条件"><BR>
<TABLE id="Tab_SetupQuery" cellSpacing="1" cellPadding="1" width="100%" border="1" runat="server">
<TR id="tr0" name="tr0">
<TD style="WIDTH: 112px">
<asp:DropDownList id="D_SelectFields" runat="server"></asp:DropDownList></TD>
<TD style="WIDTH: 37px">
<asp:DropDownList id="D_Symbol" runat="server"></asp:DropDownList></TD>
<TD style="WIDTH: 267px"><FONT face="宋体"><INPUT id="T_Query" style="WIDTH: 256px; HEIGHT: 22px" type="text" size="37" runat="server"></FONT></TD>
<TD style="WIDTH: 52px">
<asp:DropDownList id="D_AndOr" runat="server"></asp:DropDownList></TD>
<TD><INPUT id="B_Delete" style="WIDTH: 96px; HEIGHT: 24px" onclick="delRow(this)" type="button"
value="删除" name="B_Delete"></TD>
</TR>
</TABLE>JavaScript:<script language="javascript">function insertRow()
{
//copy新的一行
var containerTable=document.all("Tab_SetupQuery");
containerTable.children[0].appendChild(containerTable.rows[0].cloneNode(true));}function delRow(obj) //删除行
{
var rowIndex = document.all("Tab_SetupQuery").rows.length;
//3行以前的不能删除
if(rowIndex > 1)
{
obj.parentNode.parentNode.removeNode(true);
}
}
</script>后台中我取值:
private string SetupWhereSql(System.Web.UI.Control container)
{
string resultSql = null;
Panel pSetupQuery = (Panel)container.FindControl("P_SetupQuerySymbol");
HtmlTable table = (HtmlTable)pSetupQuery.Parent.FindControl("Tab_SetupQuery"); for(int i = 0; i < table.Rows.Count; i++)
{
HtmlInputText tQuery = (HtmlInputText)table.Rows[i].Cells[2].FindControl("T_Query"); if(tQuery.Value != null && tQuery.Value != "")
{
DropDownList dSelectFields = (DropDownList)table.Rows[i].FindControl("D_SelectFields");
DropDownList dSymbol = (DropDownList)table.Rows[i].FindControl("D_Symbol");
DropDownList dAndOr = (DropDownList)table.Rows[i].FindControl("D_AndOr"); resultSql += dSelectFields.SelectedValue + dSymbol.SelectedValue +
tQuery.Value + dAndOr.SelectedValue;
}
} return resultSql;
}问题主要在这里,后台中找到的表格只有一行!!!请各位大哥指点一下,有遇到类似问题的吗???非常紧急,在线等,搞定结帖
首先页面上一个Button按钮,Text为增加条件,目的是点击一下复制一行表格。
表格的第一行有5列:第一、二、四列是DropDownList,第三列是TextBox,第五列是一个Button,作用是删除当前的行。表格是先建立在页面上的,第一次加载只有一行,行中控件的数据是在Asp.net后台中用程序绑定的。我想当用户使用时点击一下增加条件的按钮,就多出一行,并同时设置需要的数据,这个功能我用JavaScript实行的,已经没有问题。但当我需要保存这个用户操作后的表格时,不管用户增加了多少行,我在后台代码中只能找到最开始的一行。
大概的问题我想应该是用JavaScript增加的行都是在客户端生成的,和我后台代码取表格的值那没有关联上。请问这个问题有什么好的解决办法????页面代码:
<INPUT id="B_AddQuery" style="WIDTH: 104px; HEIGHT: 24px" onclick="insertRow()" type="button"
value="增加条件"><BR>
<TABLE id="Tab_SetupQuery" cellSpacing="1" cellPadding="1" width="100%" border="1" runat="server">
<TR id="tr0" name="tr0">
<TD style="WIDTH: 112px">
<asp:DropDownList id="D_SelectFields" runat="server"></asp:DropDownList></TD>
<TD style="WIDTH: 37px">
<asp:DropDownList id="D_Symbol" runat="server"></asp:DropDownList></TD>
<TD style="WIDTH: 267px"><FONT face="宋体"><INPUT id="T_Query" style="WIDTH: 256px; HEIGHT: 22px" type="text" size="37" runat="server"></FONT></TD>
<TD style="WIDTH: 52px">
<asp:DropDownList id="D_AndOr" runat="server"></asp:DropDownList></TD>
<TD><INPUT id="B_Delete" style="WIDTH: 96px; HEIGHT: 24px" onclick="delRow(this)" type="button"
value="删除" name="B_Delete"></TD>
</TR>
</TABLE>JavaScript:<script language="javascript">function insertRow()
{
//copy新的一行
var containerTable=document.all("Tab_SetupQuery");
containerTable.children[0].appendChild(containerTable.rows[0].cloneNode(true));}function delRow(obj) //删除行
{
var rowIndex = document.all("Tab_SetupQuery").rows.length;
//3行以前的不能删除
if(rowIndex > 1)
{
obj.parentNode.parentNode.removeNode(true);
}
}
</script>后台中我取值:
private string SetupWhereSql(System.Web.UI.Control container)
{
string resultSql = null;
Panel pSetupQuery = (Panel)container.FindControl("P_SetupQuerySymbol");
HtmlTable table = (HtmlTable)pSetupQuery.Parent.FindControl("Tab_SetupQuery"); for(int i = 0; i < table.Rows.Count; i++)
{
HtmlInputText tQuery = (HtmlInputText)table.Rows[i].Cells[2].FindControl("T_Query"); if(tQuery.Value != null && tQuery.Value != "")
{
DropDownList dSelectFields = (DropDownList)table.Rows[i].FindControl("D_SelectFields");
DropDownList dSymbol = (DropDownList)table.Rows[i].FindControl("D_Symbol");
DropDownList dAndOr = (DropDownList)table.Rows[i].FindControl("D_AndOr"); resultSql += dSelectFields.SelectedValue + dSymbol.SelectedValue +
tQuery.Value + dAndOr.SelectedValue;
}
} return resultSql;
}问题主要在这里,后台中找到的表格只有一行!!!请各位大哥指点一下,有遇到类似问题的吗???非常紧急,在线等,搞定结帖
string b = Request.Form["D_SelectFields"];
如果你是只需要控件中的值而不需在在postback后按生成表格来显示的话,直接用Request.Form来接收值就可以了.如果你要在postback 后还要显示的话,就需要在form.submit前把生成的数据按你自定的格式放在一个hidden中,然后在postback 的 后台通过 手工在server端增加行.是比较麻烦点,但我看你有些功底,实现应该没问题
你的意思我大概明白,是否在我点击保存按钮前,也应该用JavaScript来将生成的这些数据保存在一个hidden中,然后在postback后再到hidden中去取出这些值?我保存的按键是一个Asp.net的服务器控件Button,点击它时是否也可以先去执行JavaScript?
只要在后代能取到值,我就没问题了,最大的问题主要是对JavaScript不熟,汗颜啊,麻烦大哥些再指点一下。 Eddie005(♂) №.零零伍 (♂) ( ) 信誉:121 Blog 2006-11-28 14:57:10 得分: 0
string a = Request.Form["T_Query"];
string b = Request.Form["D_SelectFields"];
如果我新增加了5行,每行中控件的ID是否都是一样??取的时候如何区分?
==========可以.或者你在增加一行就马上就把数据保存在hidden中.关于"如果我新增加了5行,每行中控件的ID是否都是一样??取的时候如何区分?"你可做得有规律一点.比如: 控件名+行号
ddl1_0 ddl2_0 Text_0 ddl3_0ddl1_1 ddl2_1 Text_1 ddl3_1那么取值的时候做个循环就可以了.
==========this.Btton1.Attributes.Add("onclick","javascript:return SaveData();");
javascript:function SaveData()
{}