私はデータソースとしてGridView (gvPart)
aを持っています。に、プロパティがあり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
なる場合、フッターのページ 2 をクリックすると 2 ページ目が表示されますが、データは元のデータのページ 2 からのものになります (つまり、のデフォルトSelectCommand
で検索しますsdsParts
)。
ページングは、ステートメントに関係なく、Default.aspx に記述されている を「リセット」しSqlDataSource
て使用するようです。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=""
。
SelectCommand
が「リセット」されるのはなぜsdsParts
ですか? また、これを修正/回避するにはどうすればよいですか?
編集
私は自分の問題を解決しました。同じ問題でここに来た人は、ここをクリックして、回避策の説明と提案を参照してください。
編集より明確にするために、上記のソリューションを回答に移動しました