2012-01-14 103 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#,這是一個有點粗糙。希望你明白這個主意。