2014-08-28 15 views
1

我有一個GridView,我有一些數據,也有另一個HTML表,上面有DropDownList過濾GridView。唯一的問題是,因爲它們是兩個單獨的表格,所以該列不匹配。爲了彌補的是,RowCreated方法中添加以下爲例:如何在GridView的第一個標題中插入DropDownList

protected void yourTasksGV_RowCreated(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.Header) 
    { 
     GridView hGrid = (GridView)sender; 
     GridViewRow gvrRow = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert); 
     TableHeaderCell tcCell = new TableHeaderCell(); 
     tcCell.Text = @"<asp:DropDownList ID='ddlTaskName2' CssClass='chosen-select' DataSourceID='dsPopulateTaskName2' AutoPostBack='true' DataValueField='Task Name' runat='server' Width='100%' Font-Size='11px' AppendDataBoundItems='true' OnSelectedIndexChanged='ddlTaskName_onSelectIndexChanged'> 
            <asp:ListItem Text='All' Value='%'></asp:ListItem> 
           </asp:DropDownList> 
           <asp:SqlDataSource ID='sPopulateTaskName2' runat='server' ConnectionString='<%$ ConnectionStrings:gvConnString %>' SelectCommand=\""SELECT [actionname] from [OnBase].[hsi].[action]\""></asp:SqlDataSource>"; 
     tcCell.ColumnSpan = 1; 
     gvrRow.Cells.Add(tcCell); 

     TableHeaderCell tcCell2 = new TableHeaderCell(); 
     tcCell2.Text = "TEST #2"; 
     tcCell2.ColumnSpan = 1; 
     gvrRow.Cells.Add(tcCell2); 


     yourTasksGV.Controls[0].Controls.AddAt(0, gvrRow); 
    } 
} 

我看不出有任何的DropDownList創建GridView的時候。

我的表,我使用的過濾是這樣的:

<table class="taskGridView" runat="server"> 
    <tr> 
     <td> 
      <asp:DropDownList ID="ddlTaskName" CssClass="chosen-select" DataSourceID="dsPopulateTaskName" AutoPostBack="true" DataValueField="Task Name" runat="server" Width="100%" Font-Size="11px" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlTaskName_onSelectIndexChanged"> 
       <asp:ListItem Text="All" Value="%"></asp:ListItem> 
      </asp:DropDownList> 
      <asp:SqlDataSource ID="dsPopulateTaskName" runat="server" ConnectionString="<%$ ConnectionStrings:gvConnString %>" SelectCommand=""></asp:SqlDataSource> 
     </td> 
     <td> 
      <asp:DropDownList ID="ddlService" CssClass="chosen-select" DataSourceID="dsPopulateService" AutoPostBack="true" DataValueField="Service" runat="server" Width="100%" Font-Size="11px" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlService_onSelectIndexChanged"> 
       <asp:ListItem Text="All" Value="%"></asp:ListItem> 
      </asp:DropDownList> 
      <asp:SqlDataSource ID="dsPopulateService" runat="server" ConnectionString="<%$ ConnectionStrings:gvConnString %>" SelectCommand=""></asp:SqlDataSource> 
     </td> 
     <td> 
      <asp:DropDownList ID="ddlStatus" CssClass="chosen-select" DataSourceID="dsPopulateStatus" AutoPostBack="true" DataValueField="Status" runat="server" Width="100%" Font-Size="11px" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlStatus_onSelectIndexChanged"> 
       <asp:ListItem Text="All" Value="%"></asp:ListItem> 
      </asp:DropDownList> 
      <asp:SqlDataSource ID="dsPopulateStatus" runat="server" ConnectionString="<%$ ConnectionStrings:gvConnString %>" SelectCommand=""></asp:SqlDataSource> 
     </td> 
     <td> 
      <asp:DropDownList ID="ddlDueDate" CssClass="chosen-select" DataSourceID="dsPopulateDueDate" AutoPostBack="true" DataValueField="Due Date" runat="server" Width="100%" Font-Size="11px" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlDueDate_onSelectIndexChanged"> 
       <asp:ListItem Text="All" Value="%"></asp:ListItem> 
      </asp:DropDownList> 
      <asp:SqlDataSource ID="dsPopulateDueDate" runat="server" ConnectionString="<%$ ConnectionStrings:gvConnString %>" SelectCommand=""></asp:SqlDataSource> 
     </td> 
     <td> 
      <asp:DropDownList ID="ddlOwner" CssClass="chosen-select" DataSourceID="dsPopulateOwner" AutoPostBack="true" DataValueField="Owner" runat="server" Width="100%" Font-Size="11px" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlOwner_onSelectIndexChanged"> 
       <asp:ListItem Text="All" Value="%"></asp:ListItem> 
      </asp:DropDownList> 
      <asp:SqlDataSource ID="dsPopulateOwner" runat="server" ConnectionString="<%$ ConnectionStrings:gvConnString %>" SelectCommand=""></asp:SqlDataSource> 
     </td> 
     <td> 
      <asp:DropDownList ID="ddlClient" CssClass="chosen-select" DataSourceID="dsPopulateClient" AutoPostBack="true" DataValueField="Client" runat="server" Width="100%" Font-Size="11px" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlClient_onSelectIndexChanged"> 
       <asp:ListItem Text="All" Value="%"></asp:ListItem> 
      </asp:DropDownList> 
      <asp:SqlDataSource ID="dsPopulateClient" runat="server" ConnectionString="<%$ ConnectionStrings:gvConnString %>" SelectCommand=""></asp:SqlDataSource> 
     </td> 
     <td> 
      <asp:DropDownList ID="ddlSite" CssClass="chosen-select" DataSourceID="dsPopulateSite" AutoPostBack="true" DataValueField="Site" runat="server" Width="100%" Font-Size="11px" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlSite_onSelectIndexChanged"> 
       <asp:ListItem Text="All" Value="%"></asp:ListItem> 
      </asp:DropDownList> 
      <asp:SqlDataSource ID="dsPopulateSite" runat="server" ConnectionString="<%$ ConnectionStrings:gvConnString %>" SelectCommand=""></asp:SqlDataSource> 
     </td> 
     <td> 
      <asp:DropDownList ID="ddlPractice" CssClass="chosen-select" DataSourceID="dsPopulatePractice" AutoPostBack="true" DataValueField="Practice" runat="server" Width="100%" Font-Size="11px" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlPractice_onSelectIndexChanged"> 
       <asp:ListItem Text="All" Value="%"></asp:ListItem> 
      </asp:DropDownList> 
      <asp:SqlDataSource ID="dsPopulatePractice" runat="server" ConnectionString="<%$ ConnectionStrings:gvConnString %>" SelectCommand=""></asp:SqlDataSource> 
     </td> 
     <td> 
      <asp:DropDownList ID="ddlProvider" CssClass="chosen-select" DataSourceID="dsPopulateProvider" AutoPostBack="true" DataValueField="Provider" runat="server" Width="100%" Font-Size="11px" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlProvider_onSelectIndexChanged"> 
       <asp:ListItem Text="All" Value="%"></asp:ListItem> 
      </asp:DropDownList> 
      <asp:SqlDataSource ID="dsPopulateProvider" runat="server" ConnectionString="<%$ ConnectionStrings:gvConnString %>" SelectCommand=""></asp:SqlDataSource> 
     </td> 
    </tr> 
</table> 

我從填充代碼隱藏在Page_Load中的SelectCommand中。我也呼籲Page_Load中另一個函數引用DropDownList的,但我得到一個The name 'DropDownList ID' does not exist in current content

我的GridView:

<asp:GridView ShowHeaderWhenEmpty="false" AlternatingRowStyle-BackColor="#EBE9E9" AutoGenerateColumns="false" OnSorting="yourTasksGV_Sorting" AllowSorting="true" ID="yourTasksGV" runat="server" ClientIDMode="Static" EmptyDataText="You currently have no tasks assigned to you" OnRowDataBound="yourTasksGV_RowDataBound" OnRowCreated="yourTasksGV_RowCreated"> 
    <Columns> 
     <asp:HyperLinkField Target="_self" DataNavigateUrlFields="Task Detail" DataTextField="Task Name" DataNavigateUrlFormatString="" HeaderText="Task Detail" SortExpression="Task Name" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Service" HeaderText="Service" SortExpression="Service" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Due Date" HeaderText="Due" SortExpression="Due Date" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Owner" HeaderText="Owner" SortExpression="Owner" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Client" HeaderText="Client" SortExpression="Client" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Site" HeaderText="Site" SortExpression="Site" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Practice" HeaderText="Practice" SortExpression="Practice" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Provider" HeaderText="Provider" SortExpression="Provider" ItemStyle-CssClass="taskTableColumn" /> 
    </Columns> 
</asp:GridView> 

我想要做的就是把DropDownList的表和右邊上方插入GridView的水箱內正在生成的標題。

正如你在下面的圖片中看到DropDownList應該去的空頭是在那裏,但我什麼也沒有看到。這就是我想把DropDownList與all選項放在一起的地方。

enter image description here

回答

1

而不是增加標記的單元格文本,這將不以同樣的方式在頁面生命週期評估正確,如果你曾在ASPX源宣佈它,控件添加到收藏Controls的現有控制權。

例如,

DropDownList ddlTaskName2 = new DropDownList(); 
tcCell.Controls.Add(ddlTaskName2); 

這將使你解決的下拉列表不出現的問題,因爲你已經證明這樣的:

enter image description here

下面是一個最小的工作比如你可以使用,它將一個下拉列表添加到GridView標題單元格中。

標記:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GridViewHeaderControl.aspx.cs" 
    Inherits="WebApplication7_JQuery.GridViewHeaderControl" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:GridView runat="server" ID="gvMain" OnRowCreated="gvMain_RowCreated" /> 
    </div> 
    </form> 
</body> 
</html> 

代碼隱藏:下拉菜單中按需要,按已加載在你的問題單元格文本標記

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      gvMain.DataSource = new List<object> { new { ID = 1, Name = "First" }, new { ID = 2, Name = "Second" } }; 
      gvMain.DataBind(); 
     } 
    } 

    protected void gvMain_RowCreated(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.Header) 
     { 
      GridView hGrid = (GridView)sender; 
      GridViewRow gvrRow = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert); 

      DropDownList ddl = new DropDownList(); 
      ddl.Items.Add("Option 1"); 

      TableHeaderCell tcCell = new TableHeaderCell(); 
      tcCell.Controls.Add(ddl); 
      gvrRow.Cells.Add(tcCell); 
      gvMain.Controls[0].Controls.AddAt(0, gvrRow); 
     }    
    } 

設置更多的屬性。

根據您何時進行其他綁定,您可能需要在設置datasourceid後明確地編碼ddl.DataBind()

這裏ddl是動態創建的;但是,您可能希望聲明它在你的標記代替它得到一個設計時變量您可以在任何地方引用代碼隱藏裝訂等用途:

<asp:GridView runat="server" ID="gvMain" OnRowCreated="gvMain_RowCreated" /> 
<asp:DropDownList runat="server" ID="ddlTaskName" /> 

tcCell.Controls.Add(ddlTaskName); 
+0

所以保持原樣,然後添加控件?困惑。 – Si8 2014-08-29 00:13:12

+1

@ SiKni8我編輯了我的答案,添加了一個可以使用的最小工作示例。 – 2014-08-29 17:34:22

+0

我會做出一些改變,看看我能做些什麼:)謝謝。 – Si8 2014-08-29 17:45:07

相關問題