我有这个一个需要:
首先页面上一个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;
}问题主要在这里,后台中找到的表格只有一行!!!请各位大哥指点一下,有遇到类似问题的吗???非常紧急,在线等,搞定结帖

解决方案 »

  1.   

    是不是在JavaScript中取了值后传给后台代码再处理?能说得清楚一点吗??
      

  2.   

    如果你是只需要控件中的值而不需在在postback后按生成表格来显示的话,直接用Request.Form来接收值就可以了.如果你要在postback 后还要显示的话,就需要在form.submit前把生成的数据按你自定的格式放在一个hidden中,然后在postback 的 后台通过 手工在server端增加行.是比较麻烦点,但我看你有些功底,实现应该没问题
      

  3.   

    string a = Request.Form["T_Query"];
    string b = Request.Form["D_SelectFields"];
      

  4.   

    由于楼主是用appendChild方法增加行的,所以动态增加的控件具有相同的name属性,通过Request.Form就可以取得,甚至不用遍历例如把页面运行起来,增加两行,在第一行T_Query中输入aaa,第二行输入bbb,第三行输入ccc,那么后台string a = Request.Form["T_Query"];的值就会得到aaa,bbb,ccc
      

  5.   

    cpp2017(幕白兄) ( ) 信誉:100    Blog  2006-11-28 14:56:35  得分: 0  
     
     
       如果你是只需要控件中的值而不需在在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是否都是一样??取的时候如何区分?
      

  6.   

    我保存的按键是一个Asp.net的服务器控件Button,点击它时是否也可以先去执行JavaScript?
    ==========可以.或者你在增加一行就马上就把数据保存在hidden中.关于"如果我新增加了5行,每行中控件的ID是否都是一样??取的时候如何区分?"你可做得有规律一点.比如: 控件名+行号
    ddl1_0 ddl2_0     Text_0 ddl3_0ddl1_1 ddl2_1     Text_1 ddl3_1那么取值的时候做个循环就可以了.
      

  7.   

    005大哥,你说的T_Query中取值的效果,我知道的,我就是觉得不太好,所以就将那个TextBox改成Html控件了。重要的是除了取T_Query的值,我需要取得每一行中DropDownList所选择的值,所以,在后台中如果只有一行,就取不到那些值.....
      

  8.   

    谢谢幕白,如果每增加一行就保存到Hidden中可能不好,因为用户可能还要修改时,就还要处理。能否指点一下在Sumbit时先执行JavaScript应该怎么做?
      

  9.   

    Sumbit时先执行JavaScript应该怎么做?
    ==========this.Btton1.Attributes.Add("onclick","javascript:return SaveData();");
    javascript:function SaveData()
    {}