2011-08-08 24 views
1

テーブルにテキストを追加するボタンのクリックイベントがあります。しかし、フォームを送信すると、テーブルに入力された値はポストバックに表示されません。これは可能ですか?あなたがビューステートやセッション、またはテーブルにページがポストバックされるたびに再作成するために、テーブルをコミットする必要がありますどちらかasp.netテーブルは、ポストバック後に行を動的に追加しません。

Protected Sub AddRowToInputTables(table As Table, value As String) 
    If table IsNot Nothing Then 
     Dim id As String = value.Trim() 
     Dim prefix As String = "" 
     If (table.ID = "cust_num") Then ' todo - abstract this out and use a parameter for the prefix instead 
      prefix = "CN" 
     Else 
      prefix = "RN" 
     End If 
     If id <> String.Empty Then 
      Dim tr = New TableRow() 
      Dim td = New TableCell() 
      Dim td2 = New TableCell() 
      Dim btnDelete = New ImageButton() 
      btnDelete.ID = "btn" & prefix & "_" & id & "_del" 
      btnDelete.ImageUrl = "http://res.xxxxxxxx.net/images/delete.png" ' todo - put this in the web.config or settings file 
      tr.ID = id 
      td.Text = id 
      td2.Controls.Add(btnDelete) 
      tr.Cells.Add(td) 
      tr.Cells.Add(td2) 
      Dim rows = New List(Of TableRow)() 
      For Each row In table.Rows 
       rows.Add(row) 
      Next 
      rows.Add(tr) 
      table.Rows.Clear() 
      table.Rows.AddRange(rows.ToArray()) 
      cust_num_txt.Value = String.Empty 
      res_num_txt.Value = String.Empty 
     End If 
    End If 
End Sub 
+2

しDynをこのヘルプを願っていますポストバックごとにアミックデータを再作成する必要があります。 – Zachary

答えて

0

トリックはすべて、その後... Loadイベントのみでテーブルを移入することです正常に動作するようになりました。

2

は、ここに私のコードです。テーブルが大きすぎない場合は、おそらくViewStateにそれをスローすることができます。 ViewStateのにテーブルを保存するには

ViewState["MyTable"] = table; 

のViewStateからテーブルを取得するには:

table = (DataTable)ViewState["MyTable"]; 
+0

あまりにも大きいわけではない...約20項目しか持っていないだろう...チップのためのthxは、それを試して戻ってくる! – bbqchickenrobot

+2

は動作しませんでした...テーブルはシリアル化可能ではありません.... – bbqchickenrobot

0

私は同じ問題を抱えていたし、次の解決策はうまく:

sub AddRowsToTable() 
    session("MyTable") = Nothing 
    MyTable.Rows.Clear 
    '... Adding rows and cells here ... 
end sub 


Protected Sub btnRefreshTable_Click(sender As Object, e As ImageClickEventArgs) Handles btnRefreshTable.Click 
    AddRowsToTable() 
    Session("MyTable") = MyTable 
End Sub 


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Page.IsPostBack Then 
     If Not IsNothing(Session("MyTable")) Then 
      AddRowsToTable() 
     End If 
    End If 
End Sub