SqlDataSource ControlParameter无法正常工作

时间:2016-02-24 21:26:05

标签: vb.net sqldatasource controlparameter

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

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

我想要做的是基于selProject下拉列表的条件where子句。我花了3个小时搜索并试图解决这个问题。我担心我会抢购并杀死一名合作者。

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

我有一个看起来像的控制参数:

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

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

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

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

有没有办法看到用实际值代替参数执行的SqlDataSouce SelectCommand。

2 个答案:

答案 0 :(得分:0)

  

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

令人怀疑 - Type属性处理转换,你的RDBMS也会(虽然它可能会将int列转换为字符串,拧紧你的索引)。

  

有没有办法看到用实际值代替参数执行的SqlDataSouce SelectCommand。

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

答案 1 :(得分:0)

所以我解决了我的问题,完全缺乏对GridViews处理方式的理解。

我想根据2 Drop Downs的值加载数据而不做回帖。这样,用户可以从一个页面到另一个页面,而不必继续设置下拉列表。在页面加载之前,这是不可能的,因为在页面加载接近完成之前不会设置下拉列表。网格视图填充在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