2017-05-18 45 views
-1

我已經構建了一個前端來更新GridView中選定記錄的單個列。我已經知道所有的設置都是按照我希望它的工作方式進行的,包括執行檢查以確保選中多行(通過添加到GridView的模板字段複選框),並且已從列表中選擇了一列下拉列表。 enter image description hereStored Proceedure或GridView DataSource

我把所有東西放到必須構建的代碼塊上,以便對所選行進行實際更新。這將循環遍歷每一行,所以如果我選擇了5行,它會觸發該代碼5次,並更新與該行關聯的記錄ID。

我主要與自己辯論,這將是最簡單的構建。我首先想到在SQL Server上執行一個存儲過程,併爲它提供記錄ID,要更新的列以及要寫入更新的值。但後來我開始考慮它,並意識到我有一個數據源的GridView,已經設置爲更新記錄,只要我叫它

無論哪種情況下,我需要刷新後的GridView更新已完成。

只是想知道別人可能會認爲什麼是最乾淨的方法,只是我的選擇可能是什麼。我從來沒有看到實施過多行的列編輯,所以有人可能比我有更好的想法如何去做這件事。

這裏是我的更新代碼塊,因爲它是現在...

protected void SaveColEditBtn_Click(object sender, EventArgs e) 
{ 
    //Read the column select drop down List into Local Varriables 
    String SelectedColumnItem = ColumnSelectDDL.SelectedItem.ToString(); 
    String SelectedColumnValue = ColumnSelectDDL.SelectedValue.ToString(); 

    List<int> EditRows = new List<int>(); 
    List<string> recordnumber = new List<string>(); 
    foreach (GridViewRow grv in ActVulListGV.Rows) 
    { 
    if (((CheckBox) grv.FindControl("TagRowChkBx")).Checked == true) 
    { 
     //get current row rowindex if checkbox in it is checked 
     EditRows.Add(grv.RowIndex); 
     //get the record number (RecID) 
     recordnumber.Add(grv.Cells[2].Text.ToString()); 
    } 
    } 

int[] ERows = EditRows.ToArray(); 

if (recordnumber.Count > 1) 
    { 
     if (ColumnSelectDDL.SelectedValue.ToString() == "TicketNumber") 
     { 
     // Save Ticket number // 
     } 
     else if (ColumnSelectDDL.SelectedValue.ToString() == "TicketClosed") 
     { 
     // Save Ticket Closed Value // 
     } 
     else if (ColumnSelectDDL.SelectedValue.ToString() == "Notes") 
     { 
     // Save Notes // 
     } 
     else if(ColumnSelectDDL.SelectedValue.ToString() == "Exception_ID") 
     { 
     // Save Exception ID // 
     } 
     EditColMsgLbl.Font.Bold = true; 
     SelectedRowsMsgLbl.Font.Bold = true; 

     ColEditPnlExt.Show(); 
     EditColLbl.Text = SelectedColumnItem; 

     SelectedRowsLbl.Text = ""; 

     foreach (string record in recordnumber) 
     { 
     // Insert the call of the procedure here to update the database 
     } 
    } 
    else 
    { 
    UserMessageLbl.Text = " *** Choose 2 or more rows to use column edit feature! ***"; 
    mpePopUp.Show(); 
    } 
} 
+0

這取決於。如果您通過循環一次全部更新,請使用存儲過程。不過用'EditIndex'逐個更新,使用源代碼更容易。不過,我會推薦使用後面的代碼和SP來更新一行,然後你可以使用相同的SP來更新單個或所有行(這裏有很好的教程:http://www.ezzylearning.com/tutorial/editing-data-使用-asp-net-gridview -control) – VDWWD

+0

@VDWWD我想現在就關閉它,但我也想給你的迴應。你能否重新提交答案作爲答案? 我選擇了一個SP,這是我第一次嘗試開始,但是正如我提到的那樣,我有一個DS準備好去的想法,讓我想知道這是否是最方便的選擇。感謝您的輸入和網址。 –

+0

嗨,肯。我已經加入了一個答案。 – VDWWD

回答

1

這要看情況。如果您通過循環一次全部更新,請使用存儲過程。不過,使用EditIndex逐一更新,使用源代碼更容易。不過,我會推薦使用後臺代碼和SP來更新一行,然後可以使用相同的SP來更新單行或全部行。

參見this excellent tutorial。它涵蓋了GridView編輯和更新的所有基礎知識。

如果您在不久的將來有足夠的時間備用,請嘗試爲GridView禁用ViewState。它將節省大量的傳輸帶寬和開銷。但得到以上工作第一;)