2011-04-09 52 views
1

我有一個簡單的網格視圖,列出數據庫中存在的所有文章的簡單管理面板。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

當您在按鈕點擊中更改GridView的Select查詢時,它只會對該請求產生影響。因爲GridView的編輯命令導致回發,並且在回發中,Gridview與編輯行的可見索引一起工作,但沒有過濾。 做的最好的事情就是刪除您ButtonSearchArticle_Click代碼,並把它放到你的Page_Load這樣的代碼

if (TextBoxSearchArticle.Text != ""){ 
     LinqDataSourceAdminArticles.Where = "Title.Contains(" + "\"" + TextBoxSearchArticle.Text + "\")"; 
     LinqDataSourceAdminArticles.DataBind(); 

    LinqDataSourceAdminArticles.DataBind();} 
+0

完美!它的工作原理非常感謝。 – barjed 2011-04-09 12:14:07

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 

    }