【问题标题】:ASP.NET Datasource Select CommandASP.NET 数据源选择命令
【发布时间】:2013-03-02 22:42:50
【问题描述】:

我有一个显示在GridView 中的本地数据库表。在该表中,我有一列名为:“已完成”。

当我第一次显示表格时,我显示它没有完整的记录 (Completed=false)。这是SqlDataSource 选择命令:

"SELECT * FROM [CERecord] WHERE [Completed]='false' ORDER BY [Priority]";

我有一个导致回发的复选框。我想通过勾选/取消勾选来切换已完成记录的显示:

protected void cbShowCompletedRecords_CheckedChanged(object sender, EventArgs e)
    {
        if (cbShowCompletedRecords.Checked)
            CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] ORDER BY [Priority]";
        else
        {
            CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] WHERE [Completed]='false' ORDER BY [Priority]";
        }
    }

目前,当我选中该框时,我会获得所有记录。但是当我取消选中它时,GridView 不会更新,即使上面的代码执行。我错过了什么?

【问题讨论】:

  • 尝试在if..elseGrid.Rebind()之后使用Rebind方法
  • 数据库中的 Completed 类型是什么?布尔还是字符串?
  • @Ron 你的意思是DataBind();
  • 我已经尝试过CEDatabaseSource.DataBind(),它并没有改变任何东西。 Completed 是 db 中的 bool(井位)。
  • 那么为什么不是你的 where 子句 WHERE [Completed]=0

标签: c# asp.net gridview checkbox sqldatasource


【解决方案1】:

尝试在 if...else 块之后使用您的 GridViews DataBind 方法

protected void cbShowCompletedRecords_CheckedChanged(object sender, EventArgs e)
    {
        if (cbShowCompletedRecords.Checked)
            CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] ORDER BY [Priority]";
        else
        {
            CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] WHERE [Completed]='false' ORDER BY [Priority]";
        }

        yourGrid.DataBind();
    }

这将确保网格中显示的结果反映您对 select 语句所做的更改。

【讨论】:

  • 添加了更多上下文,以及解决方案的说明。您应该始终尝试发布尽可能完整的答案。它将为未来的访问者提供更多帮助,并帮助您获得更多支持 =)
【解决方案2】:

SqlDataSource 允许您将参数绑定到控件属性:

<asp:SqlDataSource ID="myds" runat="server" 
  SelectCommand="SELECT * FROM [CERecord] WHERE [Completed]=:COMPLETED ORDER BY [Priority]">
  <SelectParameters>
    <asp:ControlParameter ControlID="MyCheckbox" Name="COMPLETED" PropertyName="Checked" Type="Boolean" />
  </SelectParameters>
</asp:SqlDataSource>

这将根据复选框的“已选中”属性修改您的选择命令。

【讨论】:

  • 这不是 OP 正在寻找的逻辑。他们要么想要所有记录,要么只想要未完成的记录。不过,关于 ControlParameters 的观​​点非常好。
  • 另外,这个语法看起来有点古怪。 [Completed]=:COMPLETED 有效吗?我一直用[Completed]=@COMPLETED
  • @jadarnel27:对不起,我误读了这个问题,感谢您指出这一点。顺便说一句,我一直使用: 语法,它对我有用...
【解决方案3】:

如果 Completed 是 DB 中的位类型,请将您的查询更改为:

"SELECT * FROM [CERecord] WHERE [Completed]=0 ORDER BY [Priority]";

【讨论】:

  • 这个答案并不能真正回答问题,但最好练习以这种方式编写查询@sd_dracula。
猜你喜欢
  • 2013-09-04
  • 1970-01-01
  • 2015-09-30
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多