gpt4 book ai didi

c# - 使用左列标题创建动态表的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-03 11:40:36 25 4
gpt4 key购买 nike

我正在创建超过 20 行的动态表,列数可以根据用户输入进行更改。第一列是标题,其他列需要使用从 Web 服务返回的数据进行绑定(bind)。并且可以编辑的行很少。当用户单击提交按钮时需要验证更改的单元格并处理数据。我创建了 ASP.net 表并一一添加了行和单元格。但这不是可重复使用的方法,是否有其他方法可以创建以左列为标题的可编辑动态表?

Table

最佳答案

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

关于c# - 使用左列标题创建动态表的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4915949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com