1

我有一个由 SQL 表填充的下拉列表 (selProject)。value 是 id 字段,name 是 name 字段。

我有一个由 sqldatasource 提供的 gridview 控件。

我想要做的是基于 selProject 下拉菜单的条件 where 子句。我花了 3 个小时搜索并试图弄清楚这一点。我担心我会咬死一个同事。

当我在下拉列表中选择特定值时,控件的 selectedValue 为“40”。我通过调试验证了这一点。这是正确和预期的。

我有一个如下所示的 controlParameter:

<asp:ControlParameter ControlID="selProject" PropertyName="SelectedValue" Name="ProjectIDPass" Type="Int32" />

SelectCommand 包括:(Batches.ProjectID = @ProjectIDPass)作为 Where 子句的一部分。

我没有行,没有错误,没有问题。我怀疑的问题是下拉列表的 SelectedValue 是一个字符串,而 Batches.ProjectID 是一个整数。

当我将 40 硬编码到 where 子句中代替 @ProjectIDPass 时,效果很好。当我回到 ControlParameter 时,炸弹就出来了。我尝试了各种转换技术。

有什么方法可以查看使用实际值代替参数执行的 SqlDataSouce SelectCommand。

4

2 回答 2

0

所以我解决了我的问题,完全不了解如何处理 GridViews。

我想根据 2 Drop Downs 中的值加载数据而不进行回发。这样,用户可以从一个页面转到另一个页面,而不必继续设置下拉菜单。在页面加载之前这是不可能的,因为在页面加载几乎完成之前不会设置下拉菜单。Gridviews 填充在 Page Init 上。我可以使用我设置的 cookie 来设置 SQL 查询中的数据,但是如果用户更改下拉列表,则在页面加载之前,cookie 不会用新数据重置,所以我会加载错误的数据。

我找到了一个解决方案,即允许页面加载,然后使用在该点正确设置的框的值,并使用它们来查询数据集并将其分配给 GridView。由于此时页面已完全加载,因此使其实际显示数据的技巧是更新面板。

有关完整说明,请参阅本文:http ://www.aspsnippets.com/Articles/Bind-Load-GridView-after-Page-load-is-completed-using-AJAX-UpdatePanel-in-ASPNet.aspx

于 2016-02-25T16:56:19.777 回答
0

我怀疑的问题是下拉列表的 SelectedValue 是一个字符串,而 Batches.ProjectID 是一个整数。

令人怀疑 - 该Type属性处理转换,您的 RDBMS 也会处理(尽管它可能会将 int 列转换为字符串,从而弄乱您的索引)。

有什么方法可以查看使用实际值代替参数执行的 SqlDataSouce SelectCommand。

像 Sql Profiler 这样的 RDBMS 分析器将是最好的方法。但您也可以挂钩SqlDataSource.SelectingandSqlDataSource.Selected事件并检查e.Commandand e.Arguments

于 2016-02-24T21:34:15.117 回答