【发布时间】:2013-07-11 00:00:50
【问题描述】:
我有一个GridView (gvPart) 和一个SqlDataSource (sdsParts) 作为它的数据源。在gvPart,我拥有AllowPaging="true" 的属性。我还有一个TextBox (txtPartSearch) 和一个Button,用于通过gvPart 输入和执行搜索。为此,我在后面的代码中有以下内容:
protected void partSearch(object sender, EventArgs e)
{
string query = txtPartSearch.Text;
string selectCmd = "SELECT ... WHERE partnum LIKE '" + query + "%' ... "; // I have cut out most of the statement for clarity
sdsParts.SelectCommand = selectCmd;
gvPart.DataBind();
}
这样做的目的是允许用户输入零件编号,并让gvPart 仅显示与查询匹配的零件,而不是整个列表。
上述方法后gvPart的首页如预期。但是,如果这个select语句导致gvPart中的页面多于一页,则在页脚中点击page 2会显示第二页,但数据将来自原始数据的第2页(即最初的数据)在搜索之前拉取,在sdsParts 中使用默认的SelectCommand)。
似乎分页“重置”SqlDataSource 并使用写在 Default.aspx 中的 SelectCommand,而不管任何 sdsParts.SelectCommand = selectCmd 语句。
我尝试将SelectCommand 完全排除在外,因此sdsParts 看起来像这样:
<asp:SqlDataSource ID="sdsParts" runat="server" ConnectionString="..." />
然后在Page_Load中添加默认的:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string selectCmd = "SELECT ... ";
sdsParts.SelectCommand = selectCmd;
gvPart.DataBind();
}
}
但随后单击gvPart 中的另一个页面使其变为空白,就像SelectCommand="" 一样。
为什么sdsParts 的SelectCommand 会“重置”,我该如何解决/避免这种情况?
编辑
我已经解决了我的问题。对于那些来到这里遇到同样问题的人,请单击此处获取解释和解决方法的建议。
编辑将我上面的解决方案移至答案以更清晰
【问题讨论】:
标签: c# asp.net gridview sqldatasource