在点击事件,搜索页面上显示GridView中的数据

时间:2013-03-28 18:43:08

标签: c# asp.net linq search gridview

我在我的页面上放置了一个gridview并将其链接到LinqDataSourceFemale(女性数据库表),我有一个类似下面的搜索事件代码

    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();



              }
        }
    }
点击按钮后,

网格视图没有出现,请帮帮我。

2 个答案:

答案 0 :(得分:1)

您必须以某种方式保留数据。单击按钮后,似乎会发生回发而您将丢失它。您可以检查数据绑定触发位置的一件事,确保它在随后的回发中被捕获。

您可以做的另一件事就是将数据存储在会话变量中,并在回发时将gridview与数据重新绑定。

首次检索数据时,您可以将其分配给会话变量:

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();

一旦这对你的女孩和男孩数据有用,那么我可以告诉你如何坚持使用会话或全局变量。

答案 1 :(得分:0)

删除此GridViewFemale.DataSourceID = "";

你是否在gridview内的页面加载中绑定了!IsPostBack

如果它没有绑定,请在gridview事件中绑定IsPostBack内部!pageload

修改

编码

protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
// here is Bind gridview code .
}
}