2012-01-09 20 views
0

GridViewにバインドしているObjectDataSourceがあります。ObjectDataSource FilterExpressionが複数のパラメータで動作しません

また、ApplyFilterExpression関数を呼び出す2つのドロップダウンリストボックスもあります。

これらはどちらも独立して動作しますが、両方の値をドロップダウンに設定すると結果は得られません。しかし、結果があるはずです。私はここで間違って何をしていますか?

<asp:ObjectDataSource ID="dsLogs" runat="server" SelectMethod="GetDTAll" 
    TypeName="LogManager.LogRepository" 
    SelectCountMethod="GetAllCount" > 
    <SelectParameters> 
     <asp:Parameter DefaultValue="DESC" Name="sortOrder" Type="String" /> 
     <asp:Parameter DefaultValue="timestamp" Name="orderBy" Type="String" /> 
     <asp:Parameter DefaultValue="1" Name="startRowIndex" Type="Int32" /> 
     <asp:Parameter DefaultValue="1000" Name="maximumRows" Type="Int32" /> 
    </SelectParameters> 
</asp:ObjectDataSource> 

private void ApplyFilterExpression() 
{ 
    dsLogs.FilterExpression = null; 
    bool hasFilter = false; 

    if (ddlTypes.SelectedIndex != 0) 
    { 
     dsLogs.FilterExpression = "type='" + ddlTypes.SelectedValue + "'"; 
     hasFilter = true; 
    } 

    if (ddlUsers.SelectedIndex != 0) 
    { 
     if (hasFilter) 
     { 
      dsLogs.FilterExpression += " AND username='" + ddlUsers.SelectedValue + "'"; 
     } 
     else 
     { 
      dsLogs.FilterExpression = "username='" + ddlUsers.SelectedValue + "'"; 
      hasFilter = true; 
     } 
    } 
    ViewState["FiltExp"] = (string)dsLogs.FilterExpression; 
} 

答えて

2

フィルタ式の更新に関係する可能性がありますが、そのようなケースは考えられません。

しかし、あなたは(それはあなたにいくつかのコードを保存し、それが簡単に理解し、維持するようになります)、それはあなたの問題を解決するかどうかを確認するには、次のコードを試みることができる:

private void ApplyFilterExpression() 
{ 
    var sbFilter = new System.Text.StringBuilder(200); 

    if (ddlTypes.SelectedIndex != 0) 
    { 
     sbFilter.Append("type='").Append(ddlTypes.SelectedValue).Append("'"); 
    } 

    if (ddlUsers.SelectedIndex != 0) 
    { 
     if (sbFilter.Length != 0) 
     { 
      sbFilter.Append(" AND "); 
     } 
     sbFilter.Append("username='").Append(ddlUsers.SelectedValue).Append("'"); 
    } 
    if (sbFilter.Length != 0) 
    { 
     dsLogs.FilterExpression = sbFilter.ToString(); 
    } else 
    { 
     dsLogs.FilterExpression = null; 
    } 
} 
+0

これは本当に奇妙である...実際に同じ結果....しかし、私はより多くのテストを行い、私は矛盾した結果を得ている....時には私はいくつかの結果を得ると時々!私のページングでは、フィルタを適用した後に10ページ以上があると言いますが、3ページ目をクリックすると「結果がありません」と表示されます。 – capdragon

+0

だから私は何を尋ねるか分からない。しかし、少なくともそれが私のテストに役立ったので、私はあなたに答えを与えるつもりです。 – capdragon

関連する問題