Лучший способ создать динамическую таблицу с заголовком левого столбца - PullRequest
2 голосов
/ 06 февраля 2011

Я создаю динамическую таблицу, в которой более 20 строк и количество столбцов могут быть изменены в зависимости от ввода пользователя. первый столбец - заголовок, а другие столбцы необходимо связать, используя данные, возвращаемые веб-службами. И есть несколько строк, которые можно редактировать. когда пользователь нажимает кнопку отправки, необходимо проверить измененные ячейки и обработать данные. Я создал таблицу ASP.net и добавил строки и ячейки одну за другой. но это не многоразовый способ, есть ли альтернатива созданию редактируемой динамической таблицы с левым столбцом в качестве заголовка?

Table

Ответы [ 3 ]

1 голос
/ 07 февраля 2011

GridView поддерживает пользовательский HeaderColumn с его свойством RowHeaderColumn .

Взгляните на эту демонстрационную страницу, чтобы увидеть, как вы можете предоставить разрешение на редактирование только для некоторых строк:

ASPX:

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

codebehind (извините за VB.Net, вот конвертер при необходимости)

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
1 голос
/ 20 февраля 2011

Здесь - это единственный способ сделать это, нужно немного настроить в данном примере, но можно использовать логику.

0 голосов
/ 07 февраля 2011

Если вы пытаетесь создать динамически редактируемые таблицы для клиентской части, вы можете поработать с некоторыми средами JavaScript. Там действительно великие. Недавно я протестировал DataTables для jQuery и jqGrid для jQuery .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...