我有一个由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。
答案 0 :(得分:0)
我怀疑的问题是下拉列表的SelectedValue是一个字符串,而Batches.ProjectID是一个整数。
令人怀疑 - Type
属性处理转换,你的RDBMS也会(虽然它可能会将int列转换为字符串,拧紧你的索引)。
有没有办法看到用实际值代替参数执行的SqlDataSouce SelectCommand。
像Sql Profiler这样的RDBMS探查器将是最好的方法。但您也可以挂钩SqlDataSource.Selecting
和SqlDataSource.Selected
个事件并检查e.Command
和e.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