我在我的页面上放置了一个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();
}
}
}
点击按钮后,网格视图没有出现,请帮帮我。
答案 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 .
}
}