SqlDataSource ControlParameter 不起作用



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

我有一个由 sqldatasource 提供的网格视图控件。

我想做的是基于 selProject 下拉列表的条件 where 子句。 我花了 3 个小时搜索并试图弄清楚这一点。 我怕我能啪�

当我在下拉列表中选择特定值时,控件的选定值为"40"。 我通过调试验证了这一点。 这是正确的,也是意料之中的。

我有一个控件参数,如下所示:

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

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

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

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

有没有办法看到用实际值代替参数执行的 SqlDataSouce 选择命令。

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

值得怀疑 - Type属性处理转换,您的 RDBMS 也会处理(尽管它可能会将 int 列转换为字符串,从而拧紧您的索引)。

有没有办法看到用实际值代替参数执行的 SqlDataSouce 选择命令。

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

所以我解决了我的问题,完全不了解 GridView 的处理方式。

我想根据 2 个下拉列表的值加载数据,而无需回发。 这样,用户可以从一个页面转到另一个页面,而不必继续设置下拉列表。 在加载页面之前,这是不可能的,因为在页面加载即将完成之前不会设置下拉列表。 网格视图在页面初始化上填充。 我可以使用我设置的 cookie 在 SQL 查询中设置数据,但如果用户更改下拉列表,则在页面加载之前不会使用新数据重置 cookie,因此我会加载错误的数据。

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

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

最新更新