2011-10-04 103 views
1

我有一個數據網格,每一行都有一個複選框。也可以更新每一行中的每個字段更新數據庫與複選框

用戶可以更新多個行並檢查任何複選框。

點擊SUBMIT按鈕應該更新所有的數據。我需要複選框來更新數據庫中的布爾值(或者sql服務器的布爾類型)。

  1. 如何實現複選框以便能夠更新數據庫中的表?
  2. 點擊提交按鈕我如何獲取所有數據進行更新?

回答

1

通過數據網格並存儲您想要更新數組或類似的所有數據。 Sql服務器有一個bit數據類型,您可以將其設置爲0(如果該複選框關閉)或1(如果它是checked)。一旦你收集所有的數據傳遞到你的數據層的SQL更新

您可以使用DataGrid對象遍歷其單元格/控件。例如,使用嵌套循環,你可以這樣做:

myDG.Items[index1].Cells[index2].Controls[0] 

編輯:這取決於輸入控件,你必須在列,因爲你要投他們。假設你有除了最後,這是複選框10列和文本框中的所有列DataGrid中,你會怎麼做:

CheckBox cb = null; 
TextBox tb = null; 
List<string> myList = new List<string>(); 
for(int row = 0; row < myDG.Items.Count; row++) 
{ 
    for(int col = 0; col < myDG.Columns.Count; col++) 
    { 
    if(col < 9){ 
     tb = myDG.Items[row].Cells[col].Controls[0] as TextBox; 
     myList.Add(tb.Text); 
    } 
    else{ 
     cb = myDG.Items[row].Cells[col].Controls[0] as CheckBox; 
     myList.Add(((cb.Checked) ? "1" : "0")); 
    } 
    } 
} 

你可以使用一個二維數組/列表保存,如果你想太多。 HTH

+0

你能告訴我怎麼會通過這個 –

+0

確定。看看我的編輯 –

+0

對不起,但你能給一個aspx html代碼的例子以及 –

2

如果您使用的是GridView,基於前一個示例中的示例,您可以執行此操作。 **這是半僞代碼,謹防**

<asp:gridview id="CustomersGridView" 
    datasourceid="CustomersSqlDataSource" 
    autogeneratecolumns="false" 
    autogenerateeditbutton="true" 
    allowpaging="true" 
    datakeynames="CustomerID" 
    runat="server"> 

    <columns> 
     <asp:templatefield> 
     <itemtemplate> <%-- This is itemtemplate so they are visible by default --%> 
      <asp:CheckBox ID="cbVerify" runat="server"></asp:CheckBox> 
      <asp:HiddenField ID="hidID" runat="server" Value='<%# Bind("CustomerID") %>'></asp:HiddenField> 
     </itemtemplate> 
     </asp:templatefield> 
     <asp:boundfield datafield="CustomerID" readonly="true" headertext="Customer ID"/> 
     <asp:boundfield datafield="CompanyName" readonly="true" headertext="Customer Name"/> 
     <asp:boundfield datafield="Address" headertext="Address"/> 
     <asp:boundfield datafield="City" headertext="City"/> 
     <asp:boundfield datafield="PostalCode" headertext="ZIP Code"/> 
    </columns> 
</asp:gridview> 

<asp:Button ID="btSubmit" runat="server" OnClick="btSubmit_Click"></asp:Button> 

後面的代碼來處理此

public void btSubmit_Click(object sender, EventArgs e) 
{ 
    foreach (GridViewRow row in CustomersGridView.Rows) 
    { 
    CheckBox cbVerify = (CheckBox)row.FindControl("cbVerify"); 
    HiddenField hidID = (HiddenField)row.FindControl("hidID"); 

    // Do your validation of the data here 
    .. 

    if (cbVerify != null) 
    { 
     // Add fields and update 
     sqlRecord.UpdateParameters["ID"].DefaultValue = hidID.Value; 
     sqlRecord.UpdateParameters["Valid"].DefaultValue = cbVerify.Checked.ToString(); 
     sqlRecord.Update(); 
    } 
} 

這應該讓你在一個特定的方向看。

+0

非常感謝你的大力幫助隱藏領域的目的是什麼? –

+0

隱藏字段可以更簡單地獲取記錄的ID,以便您可以更新它。這是必須的,因爲你可以使用** row **對象來獲得密鑰,但它只是更容易。 – Kirk