【问题标题】:creating a dropdownlist in the header of the gridview while populating its column data from excel sheet在gridview的标题中创建一个下拉列表,同时从excel表填充其列数据
【发布时间】:2011-11-21 15:32:58
【问题描述】:

我需要创建一个gridview

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

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

我用来将数据填充到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>

【问题讨论】:

    标签: .net vb.net gridview drop-down-menu datagridviewcolumn


    【解决方案1】:

    确保您的数据集或数据表不为空。如果没有行,则不会出现任何内容。这是我做的一个小测试,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
    

    【讨论】:

    • 感谢您的回复。我检查了数据集和数据表,它们不是空的。那么如何将数据表中的列绑定到网格视图?上面的 html 代码正在创建下拉列表,但不应该像你提到的那样将数据表中的值绑定到 testitem (Text='
    • 几件事。 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) 作为数据源即可。一旦你可以查看 gridview,记下所有列标题名称,可以使用 Eval 进行绑定。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 2019-04-23
      相关资源
      最近更新 更多