如何使用相同的ObjectDataSource使用多个控件,但使用不同的过滤器

Kev*_*eus 6 c# asp.net webforms c#-4.0

我正在玩ASP.Net WebForms中的优化.

在我的情况下,我有2个下拉菜单和一个网格.

我希望下拉列表充当网格的过滤器,每个过滤器在网格的一列中包含不同的数据列表(用作过滤器)

这很好..我得到了它的工作,但我不能再使用相同的数据源作为下拉列表的网格因为我正在将数据源应用filterexpression来过滤网格中的什么.

因为它与下拉列表的数据源相同,所以我在下拉列表中得到一个较小的不同列表.

现在我可以使用多个数据源,每个数据源使用相同的数据对象,但我在Sql Profiler中看到有2个数据调用,但我真的想使用相同的数据源,所以我可以进行单个数据调用.

甚至可以为网格过滤单个ObjectDataSource,同时为另一个控件提供未过滤的数据?

vpi*_*mph 4

如果您专注于不必进行多个 SQL 调用,一种选择是使用 LINQ 来查询您DataSetSelectMethod. 可能有一种更优雅的方法可以在语法上执行此操作(我无法弄清楚),但这应该使用单个ObjectDataSource.

\n\n

如果您的ObjectDataSource声明如下所示:

\n\n
<asp:ObjectDataSource ID="myObjectDataSource" runat="server" SelectMethod="myObjectDataSource_Select" OnFiltering="myObjectDataSource_Filtering">\n
Run Code Online (Sandbox Code Playgroud)\n\n

在你的SelectMethod你可以做类似的事情:

\n\n
public DataSet myObjectDataSource_Select()\n{\n   string sqlQuery = "SELECT col1, col2, col3 FROM foo";\n   SqlDataAdapter da = new SqlDataAdapter(sqlQuery, myConnectionString);\n   DataSet ds = new DataSet();\n   using (da) {\n        da.Fill(ds);\n   }\n\n   //Perform your secondary filtering here\n   object [] unfilteredQuery= (from r in ds.Tables[0].AsEnumerable()\n        select r.Field<string>(\xe2\x80\x9ccol1\xe2\x80\x9d)).ToArray();\n   myUnfilteredComboBox.Items.Clear();\n   myUnfilteredComboBox.Items.AddRange(unfilteredQuery);\n\n   return ds;    \n}\n
Run Code Online (Sandbox Code Playgroud)\n