私はデータソースとしてGridView (gvPart)aを持っています。に、プロパティがありSqlDataSource (sdsParts)ます。また、を入力して検索を実行するために使用される ともあります。これを行うには、コードビハインドに次のものがあります。gvPartAllowPaging="true"TextBox (txtPartSearch)ButtongvPart
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て使用するようです。SelectCommandsdsParts.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ですか? また、これを修正/回避するにはどうすればよいですか?
編集
私は自分の問題を解決しました。同じ問題でここに来た人は、ここをクリックして、回避策の説明と提案を参照してください。
編集より明確にするために、上記のソリューションを回答に移動しました