我有GridView (gvPart)
aSqlDataSource (sdsParts)
作为它的数据源。对gvPart
了,我有财产AllowPaging="true"
。我还有 aTextBox (txtPartSearch)
和 aButton
用于输入和执行搜索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
,在footer中点击page 2会显示第二页,但是数据会来自原始数据的page 2(也就是之前拉取的数据)搜索,默认SelectCommand
在sdsParts
)。
似乎分页“重置”SqlDataSource
并使用了SelectCommand
用 Default.aspx 编写的,不管任何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=""
.
为什么SelectCommand
“sdsParts
重置”,我该如何解决/避免这种情况?
编辑
我已经解决了我的问题。对于那些来到这里遇到同样问题的人,请单击此处获取解决方法的解释和建议。
编辑将我的上述解决方案移至答案以更清晰