2015-05-09 51 views
0

如何將gridview的每行值插入到數據庫中。我使用下面的代碼,但是null值是通過字符串傳遞的。如何在表格中保存gridview的每一行值?

foreach (GridViewRow gvrow in GridView1.Rows) 
      { 
       con.Open(); 

       string datetime = Request.Form["txtdate"]; 
       str += GridView1.DataKeys[gvrow.RowIndex].Value.ToString() + ','; 
       Id += gvrow.Cells[0].Text; 
       fName += gvrow.Cells[1].Text; 
       FaName += gvrow.Cells[2].Text; 
       LName += gvrow.Cells[3].Text; 
       attendance += gvrow.Cells[4].Text; 
       remarks += gvrow.Cells[5].Text; 
       SqlCommand cmd = new SqlCommand("INSERT INTO [first].[dbo].[Staff_Attendance]([Id],[Department],[Date],[First_name],[Father_name],[Last_name],[Attendance],[Remarks]) VALUES(@Id, @Department, @Date, @First_name, @Father_name, @Last_name, @Attendance, @Remarks)", con); 
       cmd.Parameters.AddWithValue("@Id", Id); 
       cmd.Parameters.AddWithValue("@Department", DropDownList1.SelectedItem .ToString()); 
       cmd.Parameters.AddWithValue("@Date", datetime.ToString()); 

       cmd.Parameters.AddWithValue("@First_name", fName); 
       cmd.Parameters.AddWithValue("@Father_name", FaName); 
       cmd.Parameters.AddWithValue("@Last_name", LName); 
       cmd.Parameters.AddWithValue("@Attendance", attendance); 
       cmd.Parameters.AddWithValue("@Remarks", remarks); 

       cmd.ExecuteNonQuery(); 
       ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Data Have Been Saved')", true); 
       con.Close(); 
      } 

GridView的代碼: -

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" onpageindexchanging="GridView1_PageIndexChanging" 
        PageSize="5" AutoGenerateColumns="False" DataKeyNames ="srno"> 
        <PagerSettings FirstPageText="First" LastPageText="Last" 
         Mode="NumericFirstLast" PageButtonCount="5" /> 
         <Columns > 
         <asp:TemplateField HeaderText="Sr.No."> 


    <ItemTemplate> 
    <asp:Label ID="lblsrno" runat="server" Text='<%#Eval("srno") %>'> 
    </asp:Label> 

    </ItemTemplate> 
    </asp:TemplateField> 

    <asp:TemplateField HeaderText="First Name"> 


    <ItemTemplate> 
    <asp:Label ID="lblFname" runat="server" Text='<%#Eval("first_name") %>'> 
    </asp:Label> 

    </ItemTemplate> 
    </asp:TemplateField> 

     <asp:TemplateField HeaderText="Father Name"> 


    <ItemTemplate> 
    <asp:Label ID="lblFaName" runat="server" Text='<%#Eval("father_name") %>'> 
    </asp:Label> 

    </ItemTemplate> 
    </asp:TemplateField> 

     <asp:TemplateField HeaderText="Last Name"> 


    <ItemTemplate> 
    <asp:Label ID="lblLName" runat="server" Text='<%#Eval("last_name") %>'> 
    </asp:Label> 

    </ItemTemplate> 
    </asp:TemplateField> 

     <asp:TemplateField HeaderText="Attendance"> 


    <ItemTemplate> 
<asp:DropDownList ID="ddlDesignation" runat="server" Width ="80px"> 
<asp:ListItem Text ="--Select--" ></asp:ListItem> 
<asp:ListItem Text ="P"></asp:ListItem> 
<asp:ListItem Text ="A"></asp:ListItem> 
         </asp:DropDownList> 


    </ItemTemplate> 
    </asp:TemplateField> 


    <asp:TemplateField HeaderText="Remarks"> 


    <ItemTemplate> 
<asp:DropDownList ID="ddlRemark" runat="server" Width ="80px"> 
<asp:ListItem Text ="--Select--" ></asp:ListItem> 
<asp:ListItem Text ="Paid Leave"></asp:ListItem> 
<asp:ListItem Text ="Unpaid Leave"></asp:ListItem> 
         </asp:DropDownList> 


    </ItemTemplate> 
    </asp:TemplateField> 
         </Columns> 
       </asp:GridView> 

在數據庫它存儲的空值

enter image description here

+0

你調試了你的代碼並檢查你的值嗎? –

+0

我調試它,但它採取空值.. :( –

+0

gridview標記請 – naveen

回答

1

您可以嘗試使用下面的代碼,寫了一個示例代碼,

foreach (GridViewRow row in GridView1.Rows) { 

    Label lblFname = (Label)row.FindControl("lblFname"); 
    Label lblFaName = (Label)row.FindControl("lblFaName"); 
    Label lblLName = (Label)row.FindControl("lblLName"); 
    DropDownList ddl_att = (DropDownList)row.FindControl("ddlDesignation"); 
    DropDownList ddl_rmk = (DropDownList)row.FindControl("ddlRemark"); 

    dataInsert(lblFname.Text,lblFaName.Text,ddl_att.SelectedValue); 

} 


public void dataInsert(string First_name,string Father_name,string Attendance) 
{ 
using (SqlConnection con = new SqlConnection(conn.ConnectionString)) 
    { 
     using (SqlCommand cmd = new SqlCommand()) 
     { 
      cmd.CommandText = "yourInsertQuery"; 
      cmd.Connection = con; 
      cmd.CommandType = CommandType.Text; 
      cmd.Parameters.AddWithValue("@First_name", First_name); 
      cmd.Parameters.AddWithValue("@Father_name", Father_name); 
      cmd.Parameters.AddWithValue("@Attendance", Attendance); 
       ... 
       ...  
      con.Open(); 
      cmd.ExecuteNonQuery(); 
     } 
     con.Close(); 
    } 
} 

你也可以將數據保存到數據表中,如果您的DataTable的模式和表模式匹配,然後使用SqlBulkCopy可以請批量插入到您的數據庫中。

+0

Satinder singh Thanku非常.. –

+1

@PradnyaBolli:很高興爲您提供幫助。快樂編碼:) –

0

首先,你可以找到在GridView中的控件,然後得到的文本。可能是你的問題會解決。

  fName += ((Label)gvrow.Cells[1].FindControl("lblFname")).Text; 
      FaName +=((Label)gvrow.Cells[2].FindControl("lblFaName").Text); 
      LName += ((Label)gvrow.Cells[3].FindControl("lblLName")).Text; 
      attendance +=((DropDownList)gvrow.Cells[4].FindControl("ddlDesignation")).SelectedItem.Text; 
      remarks += ((DropDownList)gvrow.Cells[5].FindControl("ddlRemark")).SelectedItem.Text; 
+0

它給出'對象引用未設置爲對象實例。'空引用錯誤 –

+0

你能告訴我它在哪一行顯示空引用錯誤 – user2695786

+0

on 1st行.... –

相關問題