2012-01-14 102 views
0

即时通讯创建一个动态表,当我点击“添加”按钮一行将添加四个单元格动态创建,第一个单元格conatins动态创建一个复选框,其余单元格包含创建的文本框动态。 分配的ID是动态创建控件ID在asp.net

Table Table1 = new Table(); 
    TableRow row = new TableRow(); 
    TableCell cell1 = new TableCell(); 
    TableCell cell2 = new TableCell(); 
    TableCell cell3 = new TableCell(); 
    TableCell cell4 = new TableCell(); 
    CheckBox checkbox = new CheckBox(); 
    TextBox textbox1 = new TextBox(); 
    TextBox textbox2 = new TextBox(); 
    TextBox textbox3 = new TextBox(); 
    row.ID = "row" + Table1.Rows.Count; 
    cell1.ID = "cell1" + Table1.Rows.Count; 
    cell2.ID = "cell2" + Table1.Rows.Count; 
    cell3.ID = "cell3" + Table1.Rows.Count; 
    cell4.ID = "cell4" + Table1.Rows.Count; 
    checkbox.ID = "ck1" + Table1.Rows.Count; 
    textbox1.ID = "tb1" + Table1.Rows.Count; 
    textbox2.ID = "tb2" + Table1.Rows.Count; 
    textbox3.ID = "tb3" + Table1.Rows.Count; 

我还有一个删除按钮, 当我选择的任何行的复选框,然后点击删除按钮particluar选择的行被删除,该表计数也减少,但是当我再次点击添加按钮即时通讯得到一个错误,如行不能创建,因为已经有一行存在与该ID,请在这个问题上好心帮助我

例如: 我创建了6行vth id:“row1”,“row2” ,“row3”,“row4”,“row5”,“row6”

即时删除即时删除行3,行5,行6,现在行是行1,行2,行4。 然后即时通讯添加另一行,现在我得到错误为“新行不能添加,因为行vth id row4已经存在”,请帮助我。

回答

0

每次删除一行时,都可以重新标识所有行/单元格。

或者你可以使用一个计数器,比如MaxRow,你可以存储会话状态,新的行将使用该计数器而不是Rows.Count。

0

那么,如果你没有添加行到表中(至少在你的代码中没有显示),那么table1.rows.count将不会增加到下一行被添加。所以这可能是你得到错误信息的原因。

我觉得问问自己为什么你觉得你需要以这种方式为每个元素分配ID是更重要的。我认为使用收集索引器和FindControl()来查找要使用的元素会更易于管理。如果使用此方法,则每个元素的容器中可以具有相同的服务器端ID。

这样,您可以使用int索引器以数学方式通过表格工作,而不必增加基于字符串的ID。

例如(也许在for循环):

(TextBox)WorkingControl = Table1.Rows(i).Cells(j).FindControl("tb1"); WorkingControl.Text = 'Hello';

请原谅我的C#,这是一个有点粗糙。希望你明白这个主意。