Как отсортировать таблицу GRIDVIEW (без источника данных) с vb.net - PullRequest
0 голосов
/ 23 января 2020

Я создаю gridview самостоятельно, но не подключен к базе данных.

<asp:GridView ID="GridView3" runat="server" AllowSorting="True">
   <Columns>
      <asp:BoundField HeaderText="Dene1" SortExpression="Dene1" > </asp:BoundField>
      <asp:BoundField HeaderText="Dene2" SortExpression="Dene2" > </asp:BoundField>
   </Columns>
</asp:GridView>

Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim number As New System.Random()
    Dim dt As New DataTable()
    Dim dr As DataRow = Nothing

    For i = 0 To Val(TextBox1.Text)
        dr = dt.NewRow()
        dt.Rows.Add(dr)
    Next
    GridView3.DataSource = dt
    GridView3.DataBind()

    For i = 0 To Val(TextBox1.Text)
        GridView3.Rows(i).Cells(0).Text = number.Next(0, 10)
        GridView3.Rows(i).Cells(1).Text = number.Next(10, 20)
    Next
End Sub

Я хочу отсортировать любой столбец.

Private Sub GridView3_Sorting(sender As Object, e As GridViewSortEventArgs) Handles GridView3.Sorting
    Dim dt As New DataTable("GridView3")
    Dim view As New DataView(dt)

    view.Sort = String.Format(“{0} {1}”, "Dene1", "ASC") 'alternative-1
    view.Sort = "Dene1 ASC"                              'alternative-2
    dt.DefaultView.Sort = "Dene1 ASC"                    'alternative-3

    GridView3.DataBind()
End Sub

Все альтернативы не работают. Сообщение об ошибке «не удается найти столбец« Dene1 ». Как я могу решить эту проблему или Как я могу сортировать таблицу gridview?

Ответы [ 3 ]

0 голосов
/ 23 января 2020

Согласно ответу JustinHui для таблицы данных понадобятся столбцы с именем, однако я также отметил кое-что еще.

Private Sub GridView3_Sorting(sender As Object, e As GridViewSortEventArgs) Handles GridView3.Sorting
    Dim dt As New DataTable("GridView3")
    Dim view As New DataView(dt)

    view.Sort = String.Format(“{0} {1}”, "Dene1", "ASC") 'alternative-1
    view.Sort = "Dene1 ASC"                              'alternative-2
    dt.DefaultView.Sort = "Dene1 ASC"                    'alternative-3
    Gridview3.DataSource = dt.DefaultView
    GridView3.DataBind()
End Sub

Конечно, вам нужно добавить источник данных сетки данных, в противном случае, что вы связываете? Вы, кажется, упускаете это.

Gridview3.DataSource = dt.DefaultView
0 голосов
/ 24 января 2020

Я думаю, вам не хватает атрибута DataField. Вот мой дизайнерский код из аналогичной реализации.

<asp:GridView ID="GridView1" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White"
    runat="server" AutoGenerateColumns="false" > 
    <Columns>
        <asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="30"/>
        <asp:BoundField DataField="Name" HeaderText="Name"  ItemStyle-Width="150"/>
        <asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-Width ="150"/>
    </Columns>
</asp:GridView>

Затем в коде позади.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    Dim dt As New DataTable()
    dt.Columns.AddRange(New DataColumn() {New DataColumn("Id", GetType(Integer)), New DataColumn("Name", GetType(String)), New DataColumn("Country", GetType(String))})
    dt.Rows.Add(1, "John Hammond", "United States")
    dt.Rows.Add(2, "Mudassar Khan", "India")
    dt.Rows.Add(3, "Suzanne Mathews", "France")
    dt.Rows.Add(4, "Robert Schidner", "Russia")
    GridView1.DataSource = dt
    GridView1.DataBind()
End Sub
0 голосов
/ 23 января 2020

Вам нужно дать имя столбцу таблицы данных:

Dim dt As New DataTable()
....
....
dt.Columns[0].ColumnName = "Dene1"
...