2012-11-27 62 views
0

我有一個從數據庫中填充的gridview,我想允許用戶編輯並添加到gridview。完成更改/添加後,將其提交到數據庫。有人可以幫助我如何做到這一點?如何在寫入數據庫之前存儲可編輯gridview的數據

這也是迄今爲止

<asp:GridView ID="Grd" runat="server" AutoGenerateColumns="False" OnRowEditing="Grds_RowEditing" 
    OnRowCancelingEdit="Grd_RowCancelingEdit" OnRowUpdating="Grd_RowUpdating" Width="500px"> 
    <Columns> 
     <asp:TemplateField HeaderText="Name"> 
      <ItemTemplate> 
       <asp:HiddenField ID="NameID" runat="server" Value='<%# Bind("ID")%>' /> 
       <asp:Label ID="LblName" runat="server" Text='<%# Bind("Name")%>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Date"> 
      <EditItemTemplate> 
       <asp:TextBox ID="TxtDate" runat="server" Text='<%# Bind("Date") %>'></asp:TextBox> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="LblDate" runat="server" Text='<%# Bind("Date")%>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:CommandField ShowEditButton="True" /> 
     <asp:CommandField ShowDeleteButton="True" /> 
    </Columns> 
</asp:GridView><asp:Button ID="btnok" Text="OK" Height="25" Width="25" runat="server" /> 

我的代碼和代碼背後

protected void Page_Load(object sender, EventArgs e) 
     { 
      BindGrid(int.Parse(hfID.Value)); 
     } 

     protected void BindGrid(int iPerson) 
     { 
      DataContext dc = new DataContext(ConfigurationManager.ConnectionStrings["DB"].ConnectionString); 

      var qry = from p in dc.GetDetails(iPerson) 
         select p; 

      Grd.DataSource = qry; 
      Grd.DataBind(); 
     } 
    protected void Grd_RowEditing(object sender, GridViewEditEventArgs e) 
     { 
      Grd.EditIndex = e.NewEditIndex; 
      //Bind data to the GridView control. 
      BindGrid(int.Parse(hfID.Value)); 

     } 
     protected void Grd_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
     { 
      Grd.EditIndex = -1; 
      BindGrid(int.Parse(hfID.Value)); 
     } 

     protected void Grd_RowUpdating(object sender, GridViewUpdateEventArgs e) 
     { 

     } 


protected void btOK_Click(object sender, EventArgs e) 
     { 
//update the database with changes 
     } 
+0

?或每行編輯 – sajanyamaha

+0

是的,該按鈕不在gridview中。我剛剛更新了它的代碼 – user1801525

回答

0

在你點擊按鈕試試這個,dtCurrentTable是你的GridView綁定的數據表。

int rowIndex = 0; 
StringCollection sc = new StringCollection(); 

for (int i = 1; i <= dtCurrentTable.Count; i++) 
{ 
//extract the TextBox values 
Label box1 = (Label)GridView2.Rows[rowIndex].Cells[0].FindControl("lblbedroom"); 
DropDownList box2 = (DropDownList)GridView2.Rows[rowIndex].Cells[0].FindControl("ddpAccomodates"); 
DropDownList box3 = (DropDownList)GridView2.Rows[rowIndex].Cells[0].FindControl("ddpBathroom"); 
DropDownList box4 = (DropDownList)GridView2.Rows[rowIndex].Cells[0].FindControl("ddpBedType"); 
TextBox box5 = (TextBox)GridView2.Rows[rowIndex].Cells[0].FindControl("txtPrices"); 
DropDownList box6 = (DropDownList)GridView2.Rows[rowIndex].Cells[0].FindControl("ddpMiniStay"); 
//get the values from the TextBoxes 
//then add it to the collections with a comma "," as the delimited values 
sc.Add("Private Room" + box1.Text + "," + box2.SelectedItem.Value + "," + box3.SelectedItem.Value + "," + box4.SelectedItem.Value + "," + box5.Text + "," + box6.SelectedItem.Value); 
rowIndex++; 
} 

InsertToDb(sc); 

然後

要保存按鈕點擊室溫
private void InsertToDb(StringCollection sc) 
    { 
     string[] splitItems = null; 
     foreach (string item in sc) 
     { 
     //split and save in to db here 
     } 
    } 
+0

謝謝,但它不是我所需要的。網格最初由存儲過程填充。用戶應該能夠更新網格,但不能更新數據庫,直到完成所有編輯。此外,他們應該可以添加一個新行,再次不更新數據庫,直到點擊確定按鈕。因此,基本上所有的編輯都應該存儲在視圖狀態或類似的視圖狀態中,然後從視圖狀態中讀取以在編輯時刷新網格,然後單擊OK按鈕更新數據庫並進行編輯和添加。 – user1801525

相關問題