2013-06-07 5 views
1

수정이 이루어지면 DataGridview를 업데이트하는 데 문제가 있습니다. 열 ("Criticite")을 업데이트하려면 두 가지 선택 항목이 포함 된 DropDownList를 구현했습니다. 선택 사항을 선택할 수 있지만 "업데이트"버튼을 클릭하면 아무 것도 변경되지 않습니다.DropDownList로 DataGridView 업데이트

이 주제에 대해 도와 주시겠습니까?

고맙습니다. 영문 기본 페이지 여기

using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Data.SqlClient; 
using System.Collections; 
using System.IO.Compression; 

public partial class _Default : Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      this.BindData(); 

     } 
    } 

    private void BindData() 
    { 
     string query = "select ID,Client,Entite,Date,Source,Domaine,Categorie,SousCategorie,Criticite,Contenu from Results"; 
     SqlCommand cmd = new SqlCommand(query); 
     GridView1.DataSource = GetData(cmd); 
     GridView1.DataBind(); 
    } 

    private DataTable GetData(SqlCommand cmd) 
    { 
     string strConnString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(strConnString)) 
     { 
      using (SqlDataAdapter sda = new SqlDataAdapter()) 
      { 
       cmd.Connection = con; 
       sda.SelectCommand = cmd; 
       using (DataTable dt = new DataTable()) 
       { 
        sda.Fill(dt); 
        return dt; 
       } 
      } 
     } 
    } 

    protected void EditCustomer(object sender, GridViewEditEventArgs e) 
    { 
     GridView1.EditIndex = e.NewEditIndex; 
     BindData(); 
    } 

    protected void CancelEdit(object sender, GridViewCancelEditEventArgs e) 
    { 
     GridView1.EditIndex = -1; 
     BindData(); 
    } 

    protected void RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowState == DataControlRowState.Edit) 
     { 
      DropDownList drpcategory1 = (DropDownList)e.Row.FindControl("DropDownList1"); 
      String query = "Select Criticite from Results"; 
      SqlCommand cmd = new SqlCommand(query); 
      DataTable dt = GetData(cmd); 
      drpcategory1.DataSource = dt; 
      drpcategory1.DataTextField = "Criticite"; 
      drpcategory1.DataValueField = "Criticite"; 
      drpcategory1.DataBind(); 
     } 
    } 


    private void BindData(string Query) 
    { 
     string connectionstring = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
     using (SqlConnection conn = new SqlConnection(connectionstring)) 
     { 
      conn.Open(); 
      using (SqlCommand comm = new SqlCommand(Query + ";select ID,Client,Entite,Date,Source,Domaine,Categorie,SousCategorie,Criticite,Contenu from Results", conn)) 
      { 
       SqlDataAdapter da = new SqlDataAdapter(comm); 
       DataSet ds = new DataSet(); 
       da.Fill(ds); 
       GridView1.DataSource = ds; 
       GridView1.DataBind(); 
      } 
     } 
    } 

    protected void RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 

     Label ID = GridView1.Rows[e.RowIndex].FindControl("ID") as Label; 
     TextBox Entite = GridView1.Rows[e.RowIndex].FindControl("txtEntite") as TextBox; 
     TextBox Date = GridView1.Rows[e.RowIndex].FindControl("txtDate") as TextBox; 
     TextBox Source = GridView1.Rows[e.RowIndex].FindControl("txtSource") as TextBox; 
     TextBox Domaine = GridView1.Rows[e.RowIndex].FindControl("txtDomaine") as TextBox; 
     TextBox Categorie = GridView1.Rows[e.RowIndex].FindControl("txtCategorie") as TextBox; 
     TextBox SousCategorie = GridView1.Rows[e.RowIndex].FindControl("txtSousCategorie") as TextBox; 
     TextBox Criticite = GridView1.Rows[e.RowIndex].FindControl("lblCriticite") as TextBox; 
     TextBox Contenu = GridView1.Rows[e.RowIndex].FindControl("txtContenu") as TextBox; 
     String UpdateQuery = string.Format("UPDATE Results SET Entite='{0}',Date='{1}',Source='{2}',Domaine='{3}',Categorie='{4}',SousCategorie='{5}',Criticite='{6}',Contenu='{7}' WHERE ID = {8}", Entite.Text, Date.Text, Source.Text, Domaine.Text, Categorie.Text, SousCategorie.Text, Criticite.Text, Contenu.Text, ID.Text); 
     GridView1.EditIndex = -1; 
     BindData(UpdateQuery); 
    } 
} 

그리고 :

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<asp:Content runat="server" ID="FeaturedContent" ContentPlaceHolderID="FeaturedContent"> 
    </asp:Content> 

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent"> 
<p> 
    Début</p> 
<p> 
    &nbsp;</p> 
<p> 
    &nbsp;</p> 
<asp:GridView ID="GridView1" runat="server" GridLines="None" AutoGenerateColumns="false" 
     AlternatingRowStyle-BackColor="#EEEEEE" EditRowStyle-BorderColor="Red" 
    OnRowEditing = "EditCustomer" 
    OnRowDataBound = "RowDataBound" 
    OnRowUpdating = "RowUpdating" 
    OnRowCancelingEdit = "CancelEdit"> 

<Columns> 
     <asp:TemplateField Visible="false" HeaderText="ID"> 
      <ItemTemplate> 
       <asp:Label runat="server" ID="ID" Text='<%#Eval("ID")%>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 


     <asp:TemplateField HeaderText="Client"> 
      <ItemTemplate> 
       <asp:Label runat="server" ID="Client" Text='<%#Eval("Client") %>' /> 
      </ItemTemplate> 

      <EditItemTemplate> 
       <asp:TextBox runat="server" ID="txtClient" Text='<%#Eval("Client") %>' /> 
      </EditItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Entite"> 
      <ItemTemplate> 
       <asp:Label runat="server" ID="Entite" Text='<%#Eval("Entite") %>' /> 
      </ItemTemplate> 

      <EditItemTemplate> 
       <asp:TextBox runat="server" ID="txtEntite" Text='<%#Eval("Entite") %>' /> 
      </EditItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Date"> 
      <ItemTemplate> 
       <asp:Label runat="server" ID="Date" Text='<%#Eval("Date") %>' /> 
      </ItemTemplate> 

      <EditItemTemplate> 
       <asp:TextBox runat="server" ID="txtDate" Text='<%#Eval("Date") %>' /> 
      </EditItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Source"> 
      <ItemTemplate> 
       <asp:Label runat="server" ID="Source" Text='<%#Eval("Source") %>' /> 
      </ItemTemplate> 

      <EditItemTemplate> 
       <asp:TextBox runat="server" ID="txtSource" Text='<%#Eval("Source") %>' /> 
      </EditItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Domaine"> 
      <ItemTemplate> 
       <asp:Label runat="server" ID="Domaine" Text='<%#Eval("Domaine") %>' /> 
      </ItemTemplate> 

      <EditItemTemplate> 
       <asp:TextBox runat="server" ID="txtDomaine" Text='<%#Eval("Domaine") %>' /> 
      </EditItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Categorie"> 
      <ItemTemplate> 
       <asp:Label runat="server" ID="Categorie" Text='<%#Eval("Categorie") %>' /> 
      </ItemTemplate> 

      <EditItemTemplate> 
       <asp:TextBox runat="server" ID="txtCategorie" Text='<%#Eval("Categorie") %>' /> 
      </EditItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="SousCategorie"> 
      <ItemTemplate> 
       <asp:Label runat="server" ID="SousCategorie" Text='<%#Eval("SousCategorie") %>' /> 
      </ItemTemplate> 

      <EditItemTemplate> 
       <asp:TextBox runat="server" ID="txtSousCategorie" Text='<%#Eval("SousCategorie") %>' /> 
      </EditItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Criticite"> 
      <ItemTemplate> 
       <asp:Label runat="server" ID="lblCriticite" Text='<%#Eval("Criticite") %>' /> 
      </ItemTemplate> 

      <EditItemTemplate> 
       <asp:TextBox runat="server" ID="lblCriticite" Text='<%#Eval("Criticite") %>' Visible = "false" /> 
       <asp:DropDownList ID="DropDownList1" runat = "server"></asp:DropDownList> 
      </EditItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Contenu"> 
      <ItemTemplate> 
       <asp:Label runat="server" ID="Contenu" Text='<%#Eval("Contenu") %>' /> 
      </ItemTemplate> 

      <EditItemTemplate> 
       <asp:TextBox runat="server" ID="txtContenu" Text='<%#Eval("Contenu") %>' /> 
      </EditItemTemplate> 
     </asp:TemplateField> 

    <asp:TemplateField HeaderText="Action"> 

     <ItemTemplate> 
     <asp:LinkButton ID="btnEdit" Text="Edit" runat="server" CommandName="Edit" /> 
     </ItemTemplate> 

     <EditItemTemplate> 
     <asp:LinkButton ID="btnUpdate" Text="Update" runat="server" CommandName="Update" /> 
     <asp:LinkButton ID="btnCancel" Text="Cancel" runat="server" CommandName="Cancel" /> 
     </EditItemTemplate> 

     </asp:TemplateField> 

    </Columns> 
</asp:GridView> 
    </asp:Content> 

답변

0

변경 다음 줄

TextBox Criticite = GridView1.Rows[e.RowIndex].FindControl("lblCriticite") as TextBox; 

로 :

DropDownList Criticite = GridView1.Rows[e.RowIndex].FindControl("DropDownList1") as DropDownList; 
,369 여기

는 C# 코드입니다

Criticite.Text 대신 Criticite.SelectedValue을 사용하십시오.

또한 업데이트 쿼리는 SQL 삽입 공격의 위험이 있습니다.

+0

VeeTheSecond 대단히 감사합니다! 홀수 라인에서는 완벽하게 작동하지만 짝수 라인에서는 DropDownList를 선택할 수 없습니다. 이것에 대해 알고 계십니까? 다시 한 번 감사드립니다. – Teddy

+0

Results.Criticite 테이블의 값을 사용하여 드롭 다운의 유효한 값을 채 웁니다. 즉, 값을 더 이상 사용하지 않으면 더 이상 목록 상자를 사용하여 값을 복구 할 수 없습니다. 일반적으로 목록 상자에 유효한 값을 가진 두 번째 테이블을 만듭니다. – VeeTheSecond