0

ページにグリッドビューを配置し、LinqDataSource Female (データベースの女性テーブル) にリンクしました。以下のような検索イベント コードがあります。

    protected void ButtonSearch_Click(object sender, EventArgs e)
    {
        using(BerouDataContext Data = new BerouDataContext())
        {
              if (DropDownListGender.SelectedItem.Text == "Male")
              {

                  int age = Convert.ToInt32(DropDownListAge.Text);
                  string education = DropDownListEducation.Text.ToString();
                  string maritalstatus = DropDownListMaritalStatus.Text.ToString();
                  //var religion = DropDownListReligion.Text.ToString();
                  string caste = DropDownListCaste.Text.ToString();
                  string city = DropDownListCity.ToString();

                  var SearchResultBoys = Data.Males.Where(tan =>
                      (tan.Age == age)
                      && (tan.Education == education)
                      && (tan.Group == maritalstatus)
                      && (tan.Caste == caste));

                  GridViewMale.DataSourceID = "";
                  GridViewMale.DataSource = SearchResultBoys;
                  GridViewMale.DataBind();
              }
              else if (DropDownListGender.SelectedItem.Text == "Female")
              {
                  int age = Convert.ToInt32(DropDownListAge.Text);
                  string education = DropDownListEducation.Text.ToString();
                  string maritalstatus = DropDownListMaritalStatus.Text.ToString();
                  //var religion = DropDownListReligion.Text.ToString();
                  string caste = DropDownListCaste.Text.ToString();
                  string city = DropDownListCity.ToString();

                  var SearchResultGirls = Data.Females.Where(tan =>
                      (tan.Age == age)
                      && (tan.Education == education)
                      && (tan.Group == maritalstatus)
                      && (tan.Caste == caste));

                  GridViewFemale.DataSourceID = "";
                  GridViewFemale.DataSource = SearchResultGirls;
                  GridViewFemale.DataBind();



              }
        }
    }

ボタンをクリックしてもグリッドビューが表示されません。助けてください。

4

2 に答える 2

1

何らかの方法でデータを永続化する必要があります。ボタンがクリックされた後、ポストバックが発生し、それを失うようです。データ バインディングが発生する場所を確認する場合は、後続のポストバックで確実にキャッチされるようにします。

あなたができるもう1つのことは、データをセッション変数に保存し、ポストバック時にグリッドビューをデータに再バインドすることです。

データが最初に取得されたときに、それをセッション変数に割り当てることができます。

Session.Add("searchResultBoys", SearchResultBoys);
Session.Add("searchResultGirls", SearchResultGirls);

次に、たとえば、後続のページロードで次のことができます。

GridViewMale.DataSource = (DataTable)Session[searchResultBoys]; //be sure to cast whatever the datasource is, in my example I just used DataTable
GridViewFemale.DataSource = (DataTable)Session[searchResultGirls];

編集:

したがって、セッション変数にデータを永続化するには、var SearchResultBoys と SearchResultGirls を型 (この場合はデータテーブル) に保存する必要があります。セッションで var を保存すると、結果セットではなくクエリ式が保存されるためです。var SearchResultBoys と SearchResultGirls を次のように変換してみてください。

IEnumerable<DataRow> SearchResultsBoys = Data.Males.Where(tan =>
            (tan.Age == age)
            && (tan.Education == education)
            && (tan.Group == maritalstatus)
            && (tan.Caste == caste)); 

次に、その結​​果をデータテーブル (メモリに格納できる場所) に割り当て、永続化することができます。

DataTable dt = SearchResultsBoys.CopyToDataTable<DataRow>();

これで、以前と同じようにデータをバインドできます。

 GridViewMale.DataSourceID = "";
 GridViewMale.DataSource = SearchResultBoys;
 GridViewMale.DataBind();

女の子と男の子のデータがうまく機能したら、セッション変数またはグローバル変数を使用して永続化する方法を紹介します。

于 2013-03-28T19:40:32.577 に答える
0

GridViewFemale.DataSourceID = "";この行を削除

gridviewそして、あなたはの中でページの読み込みに バインドしています!IsPostBackか?

バインドされていない場合は、 の中でバインド gridview してください。イベントIsPostBackpageload

編集

のコーディング

protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
// here is Bind gridview code .
}
}
于 2013-03-28T19:46:57.997 に答える