2012-05-30 23 views
2

下午所有,asp.net GridView是否可以有兩個DataSources?

我有一個gridview,我用來顯示從數據庫'行動'列表。

我有一個連接到這個gridview的下拉列表,這使得用戶可以通過下拉列表中的'Action Status'過濾數據('Assigned','Inprogress'&'Completed')。這工作完全正確....

我想要做的是有另一個過濾器選項可用於用戶,他們也想過濾用戶名。我有數據源和下拉列表爲此設置,但我只能有一個數據源連接到我的gridview?

有沒有人有關於如何使用戶也可以通過用戶名和「操作狀態」進行過濾的建議?

這裏是我的代碼,如果你需要採取偷看....

  <asp:SqlDataSource ID="dsActions" runat="server" 
       ConnectionString="<%$ ConnectionStrings:SMCConnectionString %>" 
       SelectCommand="Populate_grdAllActions_Filter" 
       SelectCommandType="StoredProcedure"> 
      <SelectParameters> 
       <asp:ControlParameter ControlID="ddFilterStatus" Name="ActionStatusID" 
        PropertyName="SelectedValue" Type="Int32" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 

     <asp:SqlDataSource ID="dsActionsByUser" runat="server" 
       ConnectionString="<%$ ConnectionStrings:SMCConnectionString %>" 
       SelectCommand="Populate_grdAllActions_Filter_By_User" 
       SelectCommandType="StoredProcedure"> 
      <SelectParameters> 
       <asp:ControlParameter ControlID="ddFilterUsers" Name="UserID" 
        PropertyName="SelectedValue" Type="Int32" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 

    <asp:SqlDataSource ID="dsFilterList" runat="server" 
      ConnectionString="<%$ ConnectionStrings:SMCConnectionString %>" 
      SelectCommand="SELECT * FROM [ActionStatus]"></asp:SqlDataSource> 

    <asp:SqlDataSource ID="dsFilterUsers" runat="server" 
      ConnectionString="<%$ ConnectionStrings:SMCConnectionString %>" 
      SelectCommand="SELECT * FROM [UserSimpleList]"></asp:SqlDataSource> 

    <table style="width: 400px"> 
     <tr> 
      <td colspan="2" style="height: 25px"><b>Filter Options:</b></td> 
     </tr> 
     <tr> 
      <td style="width: 158px"> 
       Select Action Status:</td> 
      <td> 
       <asp:DropDownList ID="ddFilterStatus" runat="server" 
        DataTextField="ActionStatus" DataValueField="ActionStatusID" 
       AutoPostBack="True" DataSourceID="dsFilterList"></asp:DropDownList> 
      </td> 
     </tr> 
     <tr> 
      <td style="width: 158px"> 
       Select Actions by User:</td> 
      <td> 
        <asp:DropDownList ID="ddFilterUsers" runat="server" 
        DataTextField="UserFullName" DataValueField="UserID" 
       AutoPostBack="True" DataSourceID="dsFilterUsers"></asp:DropDownList></td> 
     </tr> 
    </table> 

    <br/> 

     <asp:GridView ID="grdActions" runat="server" AutoGenerateColumns="False" 
      DataSourceID="dsActions" CssClass="mGrid" 
      PagerStyle-CssClass="pgr" AlternatingRowStyle-CssClass="alt" 
      AllowPaging="True" PageSize="6" DataKeyNames="ActionID" Width="68%" > 
     <AlternatingRowStyle CssClass="alt" /> 
    <Columns> 
      <asp:HyperLinkField DataNavigateUrlFields="ActionID" DataNavigateUrlFormatString="~/UpdateAction.aspx?Edit={0}" 
       DataTextField="ActionID" HeaderText="Action ID" > 
       <HeaderStyle HorizontalAlign="Center" Wrap="True" /> 
       <ItemStyle HorizontalAlign="Center" /> 
      </asp:HyperLinkField> 
     <asp:BoundField DataField="Action" HeaderText="Action" 
      SortExpression="Action" > 
      <HeaderStyle HorizontalAlign="Center" /> 
      </asp:BoundField> 
     <asp:BoundField DataField="Owner" HeaderText="Owner" 
      SortExpression="Owner"> 
      <HeaderStyle HorizontalAlign="Center" /> 
      <ItemStyle Wrap="False" /> 
      </asp:BoundField> 
     <asp:BoundField DataField="TargetDate" HeaderText="Target Date" 
      SortExpression="TargetDate" DataFormatString="{0:dd-MM-yyyy} " > 
      <HeaderStyle HorizontalAlign="Center" Wrap="True" /> 
      <ItemStyle Wrap="False" /> 
      </asp:BoundField> 
     <asp:BoundField DataField="Action Status" HeaderText="Action Status" 
      SortExpression="Action Status" > 
      <HeaderStyle HorizontalAlign="Center" Wrap="True" /> 
      <ItemStyle Wrap="False" /> 
      </asp:BoundField> 
    </Columns> 
     <PagerStyle CssClass="pgr" /> 
    </asp:GridView> 

任何幫助提前多appriechiated。

問候 貝蒂

+0

我不知道WH在你的表中看起來像是你想查看動作的描述,然後是用戶的動作,所以在dsFilterUsers中,你不會有'SELECT * FROM [ActionStatus] WHERE user = userSelected'嗎?因此,不要創建另一個數據源,只需更改現有的數據源,然後重新綁定它('grdActions.DataBind()') – Robbie

回答

0

您可以確定哪個選項選擇的用戶,然後設置在隱藏代碼中的數據源,而不是在ASPX有線起來。

僞代碼假定如果選擇了FilterUsers下拉列表中,然後結合到動作通過用戶數據源:

if(IsPostBack){ 
    if(ddlFilterUsers.SelectedValue <> ""){ 
     grdActions.DataSource = dsActionsByUser; 
     dsFilterUsers.DataBind(); 
     //etc 
    } 
} 
0

在後面部分的代碼,在ddFilterStatus_SelectIndexChanged()事件,檢查適當的「操作狀態」,並按如下選擇數據源,

if(ddFilterStatus.SelectedValue == someid1) 
{ 

    grdActions.DataSource = appropriate datasource 

} 
else 
{ 
     grdActions.DataSource = appropriate datasource 
    } 
    grdActions.DataBind() 

希望這有助於...

相關問題