0

我需要创建一个gridview

  1. 用 Excel 工作表中的数据填充其列,并
  2. 对于 gridview 中的每一列,标题应包含一个下拉列表,其中包含电话、姓名、价格等列表项,用户将选择并设置为特定列的标题。

我将数据导入到 gridview 中,但我无法在 gridview 中创建下拉列表。如果我尝试在设计器页面中创建一个下拉列表,它只是在 gridview 标题中创建下拉列表,但不填充数据。那么,如何在 gridview 的标题中创建一个下拉列表,同时从 excel 表填充其列数据。请帮忙。

我用来将数据填充到gridview的代码是

Dim con As String = ""
    Select Case Extension
        Case ".xls"
            'Excel 97-03
            con=ConfigurationManager.ConnectionStrings("Excel03ConString").ConnectionString()
            Exit Select
        Case ".xlsx"
            'Excel 07
            con =ConfigurationManager.ConnectionStrings("Excel07ConString").ConnectionString()
            Exit Select
    End Select
    con = String.Format(con,Path)
    Dim connExcel As New OleDbConnection(con)
    Dim str As String = "SELECT * From [Sheets$]"
    Dim cmdExcel As New OleDbCommand(str, connExcel)
    Dim da As New OleDbDataAdapter(cmdExcel)
    Dim dset As New DataSet()
    da.Fill(dset, "Tabledata")
    Dim dtable As DataTable = ds.Tables(0)
    GridView1.DataSource = dset.Tables(0).DefaultView
    GridView1.DataBind()

创建下拉列表的代码是

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
            <Columns>             
                <asp:TemplateField>
                    <HeaderTemplate>
                        <asp:DropDownList ID="DropDownList1" runat="server"   AutoPostBack="True">
                            <asp:ListItem Text="name " Value="Description of Goods" />
                            <asp:ListItem Text="telephone" Value="Count" />
                            <asp:ListItem Text="price" Value="Weight" />
                            <asp:ListItem Text="Value" Value="Value" />
                        </asp:DropDownList>
                    </HeaderTemplate>
4

2 回答 2

0

确保您的数据集或数据表不为空。如果没有行,则不会出现任何内容。这是我做的一个小测试,Ddl 出现在标题中。只需在新页面上按原样运行示例即可。

HTML

<asp:GridView ID="GridView1" runat="server">
      <Columns>
      <asp:TemplateField>
      <HeaderTemplate>

        <asp:DropDownList ID="DropDownList1" runat="server">
        <asp:ListItem Text="name " Value="Description of Goods" />
                            <asp:ListItem Text="telephone" Value="Count" />
                            <asp:ListItem Text="price" Value="Weight" />
                            <asp:ListItem Text="Value" Value="Value" />
        </asp:DropDownList>
      </HeaderTemplate>
      <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("TestItem") %>'></asp:Label>
      </ItemTemplate>
      </asp:TemplateField>
      </Columns>
      </asp:GridView>

VB

Public Class DllInGvHeader
  Inherits System.Web.UI.Page

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
      Dim tList As New List(Of Test)
      Dim t As New Test
      t.TestItem = 1
      tList.Add(t)
      t.TestItem = 2
      tList.Add(t)
      GridView1.DataSource = tList
      GridView1.DataBind()
    End If
  End Sub

End Class

Public Class Test
  Public Property TestItem As String
End Class
于 2011-11-21T15:56:33.477 回答
0

有几件事。1. 确保在 Gridview 中将 AutoGenerateColumns 设置为“True”。2. 在您的代码中,“Dim dtable As DataTable = ds.Tables(0)”应更改为“Dim dtable As DataTable = dset.Tables(0)”,即您要填充的数据集。

此外,如果 AutoGenerateColumns 设置为 True,Gridview 将自动显示所有列,因此如果您的数据集不为空,则会显示一些内容。此外,您不必使用 defaultView,只需 dset.Tables(0) 作为数据源即可。一旦您可以查看网格视图,请注意所有列标题名称,可以使用 Eval 绑定,就像我之前的示例一样。

于 2011-11-21T19:58:54.873 回答