2011-02-06 110 views
2

我正在创建具有超过20行和列数的动态表格,可根据用户输入更改。第一列是标题,其他列需要使用从Web服务返回的数据进行绑定。并且有几行可以编辑。当用户点击提交按钮时需要验证已更改的单元格并处理数据。 我已经创建了ASP.net表,并逐个添加行和单元格。但这是不可重复使用的方式,是否有任何替代方法来创建左列作为标题的可编辑动态表格?使用左列标题创建动态表格的最佳方法

Table

回答

1
Here

是做到这一点的一种方法,需要在给定的例子一些定制但可使用的逻辑。

0

如果你想创建客户端的动态可编辑的表,您可能需要使用一些JavaScript框架的工作。那里真的很棒。我最近测试了jQuery的DataTablesjQueryjqGrid

+0

我在寻找服务器端的替代品。无论如何感谢您的信息。 – Damith 2011-02-07 17:29:54

1

GridView控件支持自定义HeaderColumn与它的RowHeaderColumn Property

看一看这个演示页面,看你怎么可能提供允许编辑仅用于某些行:

ASPX:

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

代码隐藏(对不起,VB.Net,here's转换器如果必要的话)

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

嘿蒂姆,很好的例子,但我仍然无法找到一种方法来绑定数据作为我的问题上的更新图像。头是表的第一列,数据流按列逐列,而不像普通的行绑定。 – Damith 2011-02-07 17:35:23