GridView选择错误的行进行编辑

时间:2011-04-09 11:34:03

标签: c# asp.net gridview

我有一个简单的管理面板,其中包含一个简单的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但这些并没有解决我的问题。

谢谢!

2 个答案:

答案 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

    }