0

グリッドビューで検索する単語を書くテキストボックスがあります。リサーチはグリッドビューの最初のページではうまく機能しますが、別のページに移動するとリサーチがリセットされます。

これが私のコードです:

using System;
using System.Data;
using System.Configuration;
using System.Text.RegularExpressions;
using System.Web;
using System.Text;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Collections;
using System.Collections.Generic;
using System.IO.Compression;
using System.IO;


public partial class _Default : Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            this.BindData();
        }
    }


    private void BindData()
    {
        string query = "select * from Ressources";
        SqlCommand cmd = new SqlCommand(query);
        GridView1.DataSource = GetData(cmd);
        GridView1.DataBind();      
    }


    private DataTable GetData(SqlCommand cmd)
    {
        string strConnString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
        using (SqlConnection con = new SqlConnection(strConnString))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                cmd.Connection = con;
                sda.SelectCommand = cmd;
                using (DataTable dt = new DataTable())
                {
                    sda.Fill(dt);
                    return dt;
                }
            }
        }
    }


    protected void EditCustomer(object sender, GridViewEditEventArgs e)
    {
        GridView1.EditIndex = e.NewEditIndex;
        this.BindData();
    }


    protected void CancelEdit(object sender, GridViewCancelEditEventArgs e)
    {
        GridView1.EditIndex = -1;
        BindData();

    }

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        BindData();
    }


    private void BindData(string Query)
    {
        string connectionstring = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
        using (SqlConnection conn = new SqlConnection(connectionstring))
        {
            conn.Open();
            using (SqlCommand comm = new SqlCommand(Query + ";select * from Ressources", conn))
            {
                SqlDataAdapter da = new SqlDataAdapter(comm);
                DataSet ds = new DataSet();
                da.Fill(ds);
                GridView1.DataSource = ds;
                GridView1.DataBind();
            }
        }
    }


    protected void RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        ...
    }

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (GridView1.EditIndex >= 0)
            return;

        if ((e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate) &&
        (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Header))
        {
            e.Row.Cells[3].Visible = false;
            e.Row.Cells[4].Visible = false;
            e.Row.Cells[6].Visible = false;
            e.Row.Cells[7].Visible = false;
            e.Row.Cells[8].Visible = false;
            e.Row.Cells[10].Visible = false;
            e.Row.Cells[14].Visible = false;
            e.Row.Cells[15].Visible = false;
        }
    }

    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        ...
    }


    private void AddNewRecord(string URL, string Type_Source, string First_date, string Data, string Crawler_subcategory)
    {
        ...
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        ...
    }

    public void btnSearch_Click(object sender, EventArgs e)
    {
        string query = "select * from Ressources where data like'%" + txtSearch.Text + "%'";
        SqlCommand cmd = new SqlCommand(query);
        GridView1.DataSource = GetData(cmd);
        GridView1.DataBind();
    }

}

単語を検索するために使用される関数は、btnSearch_Click() という名前です。

よろしくお願いします。

ありがとうございました !

4

5 に答える 5

1
public void btnSearch_Click(object sender, EventArgs e)
    {

     BindData();

    }
    Private xxx BindData()
    {
     if(Viewstate[txt] !==null)
         {
          string WhereCl= GetWhereClause(txt);
         }
        string query = "select * from Ressources";
         if(!string.IsNullOrEmpty(WhereCl))
       { 
         query =query + WhereCl;
       }         
        SqlCommand cmd = new SqlCommand(query);
        GridView1.DataSource = GetData(cmd);
        GridView1.DataBind();
    }

    Private string GetWhereClause(string txt)
    {
      string where  = where data like'%" + txt+ "%'";
    }

ページング時にもこのバインド メソッドを呼び出します。お役に立てれば ..

于 2013-08-05T14:17:53.400 に答える
0

検索パラメータをセッションに保存するだけで、内部にあるかどうかを確認して再度検索する方が高速ではありません(テキストデータが保存されていないようです)

于 2013-07-31T09:51:29.520 に答える
0

別のメソッドを次のように宣言します

private void Search()
{
string query = "select * from Ressources where data like'%" + txtSearch.Text + "%'";
        SqlCommand cmd = new SqlCommand(query);
        GridView1.DataSource = GetData(cmd);
        GridView1.DataBind();
}

Search()ページインデックスの変更を次のように呼び出します

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        Search();
    }

また、検索ボタンのクリック時に同じメソッドを呼び出すことができます。

public void btnSearch_Click(object sender, EventArgs e)
{
   Search();
}
于 2013-07-31T09:53:50.320 に答える
0

以下のように、データをバインドするメソッドを 1 つだけ作成します。

private void BindData()
    {
        string query = "";
        if (txtSearch.Text != "" &&  txtSearch.Text != string.Empty) {
            query = "select * from Ressources where data like'%" + txtSearch.Text + "%'";                 
        } else {
             query = "select * from Ressources";
        }

        SqlCommand cmd = new SqlCommand(query);
        GridView1.DataSource = GetData(cmd);
        GridView1.DataBind();
    }

それで全部です

于 2013-07-31T09:56:06.780 に答える