2013-02-19 2 views
0

버튼 클릭으로 두 개의 TextBox에서 추출한 데이터가 포함 된 GridView가 있습니다. Gridview에서 다음과 같은 기능을 구현하고 싶습니다. 1)이 GridView의 데이터를 편집 할 수 있어야합니다. 2) GridView에서 행을 삭제할 수도 있어야합니다. 3) 마지막으로 다른 제출 단추를 클릭하면 Gridview의 모든 행이 데이터베이스에 저장됩니다.GridView에서 SQL Server 2005로 데이터를 저장하는 방법은 무엇입니까? Gridview에서 행을 편집하고 삭제하는 방법은 무엇입니까?

C# (Visual Studio 2010)을 사용하여 코딩 된 웹 기반 ASP.NET 응용 프로그램이며 SQL Server 2005를 사용합니다. 위의 지정된 기능을 구현하기 위해 아래 코드를 어떻게 변경합니까? 당신의 영문 페이지에 잘

public partial class _Default : System.Web.UI.Page 
{ 
    SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["constring"]); 
    SqlCommand cmd = new SqlCommand(); 
    DataSet ds = new DataSet(); 
    SqlDataAdapter da = new SqlDataAdapter(); 
    DataTable dt = new DataTable(); 

    protected void Page_Load(object sender, EventArgs e) 
    {  
     if (IsPostBack) 
     { 
      dt = Session["data_table"] as DataTable; 
     } 
    } 

    protected void btnTextDisplay_Click(object sender, EventArgs e) 
    {  
     if (dt == null) 
     { 
      dt = new DataTable(); 
      DataColumn dc1 = new DataColumn("Name"); 
      DataColumn dc2 = new DataColumn("City"); 
      dt.Columns.Add(dc1); 
      dt.Columns.Add(dc2); 

      Session["data_table"] = dt; 
     } 

     DataRow dr = dt.NewRow(); 
     dr[0] = txtName.Text; 
     dr[1] = txtCity.Text; 
     dt.Rows.Add(dr); 
     gvDisplay.DataSource = dt; 
     gvDisplay.DataBind(); 
    } 

    protected void btnDisplay_Click(object sender, EventArgs e) 
    { 
     ds.Clear(); 
     da = new SqlDataAdapter("insert into PRACT values(@name, @city)", con); 
     con.Open(); 
     da.Fill(ds); 
     gv.DataSource = ds; 
     gv.DataBind(); 
     con.Close();   
    } 
} 
+0

'http : // www.c-sharpcorner.com/uploadfile/anjudidi/select-update-and-delete-data-in-a-Asp-Net-gridview-control /'을 확인하십시오. – Dotnet

답변

0

나는 그렇게 당신을 추천 할 것입니다 :

<asp:GridView runat="server" id="gvDisplay" OnRowCommand="grid_OnRowCommand"> 
    <Columns> 
    <TemplateField> 
    <ItemTemplate> 
     <asp:TextBox runat="server" id="txtNameGrid" Text='<%#DataBinder.Eval(Container.DataItem, "Name")%>'/> 
    </ItemTemplate> 
    </TemplateField> 
    <TemplateField> 
    <ItemTemplate> 
     <asp:TextBox runat="server" id="txtCityGrid" Text='<%#DataBinder.Eval(Container.DataItem, "City")%>'/> 
    </ItemTemplate> 
    </TemplateField> 
    <TemplateField> 
    <ItemTemplate> 
     <asp:Button runat="server" id="btnDeleteGrid" Text = "Delete" CommandArgument='<%#Eval(Container.DataItem, "YourIDColumn")%>' CommandName="DeleteRow"/> 
    </ItemTemplate> 
    </TemplateField> 
</Columns> 
</asp:GridView> 

나는 당신이 당신의 DataTable에 새 열을 생성하는 것이 좋습니다,이 열이 각 레지스터의 ID가됩니다.

페이지의 DataTable에 레지스터를 추가하기 때문에 int 형식의 세션을 만들어야하고 btnTextDisplay_Click 이벤트가 호출 될 때마다이 int Session을 늘리고 그 값을 DataTable의 Column ID로 설정해야합니다 .

그리드의 속성 OnRowCommand는 btnDeleteGrid 버튼을 클릭 할 때 호출되는 이벤트입니다. 이 이벤트의 코드는 다음과 같습니다.

protected void grid_OnRowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if(e.CommandName == "DeleteRow") 
    { 
     foreach(DataRow row in dt.Rows) 
     { 
     if(Convert.ToInt32(row["YourColumnID"]) == Convert.ToInt32(e.CommandArgument)) 
      row.Delete(); 
     } 

     dt.AcceptChanges(); 

     gvDisplay.DataSource = dt; 
     gvDisplay.DataBind(); 
    } 
} 

레지스터를 저장하는 이벤트는 이와 같아야합니다.

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    foreach(DataRow row in dt.Rows) 
    { 
    SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["constring"]); 
    SqlCommand cmd = new SqlCommand(); 

    cmd.CommandText = "INSERT INTO YOUR_TABLE_NAME (NAME, CITY) VALUES (" + row["Name"].ToString() + "," + row["City"].ToString() + ")"; 

    int numRegs = cmd.ExecuteNonQuery(); 
    } 
} 

정말 도움이 될 것으로 기대됩니다. 코드를 테스트 할 수 없으며 DataTable에서 잘 작동하지 않으므로 코드에 문제가있는 경우 알려주세요.

삽입을 실현하기 위해 대량 삽입물을 사용하는 것이 더 효율적이라고 생각합니다. 그것을 만드는 방법을 찾으십시오, 그것은 매우 차갑고 빠릅니다.

또한 직접 명령 텍스트를 사용하는 것보다 안전하기 때문에 저장 프로 시저를 사용해보십시오. 그것들을 사용하면 SQL 삽입을 방지 할 수 있습니다.

감사합니다.

관련 문제