2011-02-06 4 views
2

ユーザーの入力に応じて20行以上の列を持つ動的表を作成できます。最初の列はヘッダーで、他の列はWebサービスから返されるデータを使用してバインドする必要があります。編集可能な行はほとんどありません。ユーザーが送信ボタンをクリックすると、変更されたセルを検証してデータを処理する必要があります。 ASP.netテーブルを作成し、行とセルを1つずつ追加しました。これは再利用可能な方法ではありませんが、ヘッダーとして左列の編集可能な動的表を作成する方法はありますか?左の列ヘッダーで動的表を作成する最も良い方法

Table

答えて

1

Hereこれを行うための一つの方法である)必要であれば、与えられた例のいくつかのカスタマイズを必要とするが、ロジックが使用することができます。

0

あなたは、クライアント側のためのダイナミックな編集可能なテーブルを作成しようとしている場合は、いくつかのJavaScriptフレームワークで作業することをお勧めします。そこには本当に素晴らしいものがあります。私は最近、jQueryの場合はDataTablesjQueryの場合はjqGridをテストしました。

+0

私はサーバー側の代替を探しています。とにかくあなたの情報に感謝します。 – Damith

1

GridViewは、カスタムのHeaderColumnをRowHeaderColumn Propertyでサポートしています。

は、あなただけのいくつかの行の編集を許可するように提供できるかを確認するには、このデモ・ページを見てください:

ASPX:VB.Net、here'sコンバータのため申し訳ありません

<asp:GridView ID="GridView1" runat="server" ShowHeader="true" 
      RowHeaderColumn="Month" AutoGenerateEditButton="True"></asp:GridView> 

分離コード(

Public Class GridViewDemo 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     If Not IsPostBack Then 
      bindSampleData() 
     End If 
    End Sub 

    Private Sub bindSampleData() 
     Dim rnd As New Random(Date.Now.Millisecond) 
     Dim data As New DataTable("SampleData") 
     data.Columns.Add("Month", GetType(String)) 
     data.Columns.Add("Sold", GetType(Double)) 
     data.Columns.Add("Units", GetType(Int32)) 
     For m As Int32 = 1 To 12 
      Dim row As DataRow = data.NewRow 
      row("Month") = Globalization.CultureInfo.CurrentCulture.DateTimeFormat().GetMonthName(m) 
      row("Sold") = 1000 * rnd.Next(1, 10) + rnd.Next(0, 999) 
      row("Units") = 10 * rnd.Next(1, 10) + rnd.Next(0, 99) 
      data.Rows.Add(row) 
     Next 

     Me.GridView1.DataSource = data 
     Me.GridView1.DataBind() 
    End Sub 

    Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound 
     If e.Row.RowType = DataControlRowType.DataRow Then 
      Dim month As String = DirectCast(DirectCast(e.Row.DataItem, DataRowView)("Month"), String) 
      ' don't allow to edit current month's values to demonstrate how to edit certain rows ' 
      If month.Equals(Globalization.CultureInfo.CurrentCulture.DateTimeFormat().GetMonthName(Date.Now.Month)) Then 
       e.Row.Cells(0).Enabled = False 
      Else 
       e.Row.Cells(0).Enabled = True 
      End If 
     End If 
    End Sub 

    Private Sub GridView1_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView1.RowEditing 
     GridView1.EditIndex = e.NewEditIndex 
     bindSampleData() 
    End Sub 

    Private Sub GridView1_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles GridView1.RowCancelingEdit 
     GridView1.EditIndex = -1 
     bindSampleData() 
    End Sub 

    Private Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating 
     Dim records(e.NewValues.Count - 1) As DictionaryEntry 
     e.NewValues.CopyTo(records, 0) 
     ' Iterate through the array and HTML encode all user-provided values 
     ' before updating the data source. 
     Dim entry As DictionaryEntry 
     For Each entry In records 
      e.NewValues(entry.Key) = Server.HtmlEncode(entry.Value.ToString()) 
     Next 
     ' process the changes, f.e. write it to the database, senseless with my random sample-data ' 

     GridView1.EditIndex = -1 
     bindSampleData() 
    End Sub 
End Class 
+0

こんにちはTimさん、いい例ですが、まだ私の質問で更新されたイメージとしてデータをバインドする方法を見つけることができませんでした。ヘッダーはテーブルの最初の列、データフローは列ごと、通常の行バインディングとは異なります。 – Damith

関連する問題