我有一个简单的管理面板,其中包含一个简单的gridview,列出了数据库中的所有文章。
我添加了一个过滤涂鸦(一个文本框+一个按钮),允许用户通过文章名称过滤gridview。
过滤器的代码:
protected void ButtonSearchArticle_Click(object sender, EventArgs e)
{
{
LinqDataSourceAdminArticles.Where = "Title.Contains(" + "\"" + TextBoxSearchArticle.Text + "\")";
LinqDataSourceAdminArticles.DataBind();
}
LinqDataSourceAdminArticles.DataBind();
}
gridview上启用了默认的快速编辑和删除功能。问题是,在我用该代码过滤后,当我点击“编辑”按钮时,它开始选择错误的行。任何想法如何解决这个问题?我知道它与回发有关。
我已经检查了Why is My GridView FooterRow Referencing the Wrong Row?和Sorted gridview selects wrong row但这些并没有解决我的问题。
谢谢!
答案 0 :(得分:2)
当您在按钮单击中更改GridView的Select查询时,它仅对该请求生效。因为GridView的编辑命令会导致回发,而在回发中,Gridview使用已编辑行的可见索引,但没有过滤。 最好的办法是删除你的ButtonSearchArticle_Click代码并将其放入你的Page_Load代码中
if (TextBoxSearchArticle.Text != ""){
LinqDataSourceAdminArticles.Where = "Title.Contains(" + "\"" + TextBoxSearchArticle.Text + "\")";
LinqDataSourceAdminArticles.DataBind();
LinqDataSourceAdminArticles.DataBind();}
答案 1 :(得分:0)
//Your Page Load Event
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["s_event"] = "0"; // Initialize session variable
BindData(); // Gridview Binding
}
}
protected void BindData()
{
if ((Session["s_event"].ToString())=="1")
{
cmdstr_ = (Session["search_item"].ToString());
}
else
{
cmdstr_ = ""; // Your command string to populate gridview
}
// `enter code here`
}
protected void btnSearch_Click(object sender, EventArgs e)
{
Session["s_event"] = 1; // Search Event becomes 1.
// Your Search Logic here
Session["search_item"] = cmdstr;
// Bind Gridview here
}