2013-06-18 3 views
0

현재 중소 기업을위한 인보이스 생성 프로젝트를 진행 중입니다.Gridview에서 드롭 다운리스트의 값을 유지하는 방법

3 가지 드롭 다운리스트 (DDL)가 있습니다.

첫 번째 드롭 다운리스트 (제품 카테고리는) 이미에 데이터베이스 일치에서 데이터를 검색 할 첫번째 DDL, 두 번째 드롭 다운리스트 (제품 종류)에서 선택시 등 4을 ListItem 즉, 카펫, 가구,

로 설정되어

첫 번째 DDL에서 선택한 값.

마찬가지로 두 번째 DDL에서 선택하면 세 번째 드롭 다운 목록 (제품 ID)은 두 번째 DDL에서 선택한 값과 일치하는 데이터베이스에서 데이터를 검색합니다.

세 번째 DDL에서 선택하면 텍스트 상자 (제품 설명, 단가)에 세 번째 DDL에서 선택한 값과 일치하는 데이터베이스에서 데이터를 검색하여 채 웁니다.

이제 문제는 내가 클릭 할 때마다 동적으로 새 행을 추가하는 "새 행 추가"버튼을 클릭하면 두 번째 및 세 번째 DDL에서 선택한 값이 더 이상 없지만 텍스트 상자의 값이 그대로 유지된다는 것입니다.

누군가가 그/그녀가 원하는대로 "Add New Row"버튼을 클릭한다고해도 두 번째 및 세 번째 DDL 값을 유지하는 방법을 알려줄 수 있습니까?

아래 코드는 지금까지 수행 한 전체 코드입니다.

GenInvoice.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage/AdminLogin.master" AutoEventWireup="true" CodeFile="GenInvoice.aspx.cs" Inherits="GenInvoice" %> 

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" ShowFooter="true"> 
    <Columns> 

     <asp:BoundField DataField="Row Number" HeaderText="Row Number" /> 

     <asp:TemplateField HeaderText="Category"> 
      <ItemTemplate> 
       <asp:DropDownList ID="ddlCategory" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged"> 
        <asp:ListItem>Please Select</asp:ListItem> 
        <asp:ListItem>Carpets</asp:ListItem> 
        <asp:ListItem>Electrical Appliances</asp:ListItem> 
        <asp:ListItem>Furnitures</asp:ListItem> 
        <asp:ListItem>Others</asp:ListItem> 
       </asp:DropDownList> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Type"> 
      <ItemTemplate> 
       <asp:DropDownList ID="ddlType" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlType_SelectedIndexChanged"> 
        <asp:ListItem>Please Select</asp:ListItem> 
        </asp:DropDownList> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Model No" > 
      <ItemTemplate> 
       <asp:DropDownList ID="ddlModelNo" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlModelNo_SelectedIndexChanged" > 
        <asp:ListItem>Please Select</asp:ListItem> 
        </asp:DropDownList> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Product Description"> 
      <ItemTemplate> 
       <asp:Label ID="lblDescription" runat="server"></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Quantity"> 
      <ItemTemplate> 
       <asp:TextBox ID="txtQuantity" runat="server" AutoPostBack="false" OnTextChanged="txtQuantity_TextChanged" ></asp:TextBox> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Unit Price"> 
      <ItemTemplate> 
       <asp:TextBox ID="txtUPrice" runat="server" AutoPostBack="true"></asp:TextBox> 
      </ItemTemplate> 
      <FooterTemplate> 
       <asp:Label ID="lblGTotal" runat="server">Grand Total :</asp:Label> 
      </FooterTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Sub - Total"> 
      <ItemTemplate> 

       <asp:TextBox ID="txtSTotal" runat="server"></asp:TextBox> 
      </ItemTemplate> 
      <FooterTemplate> 
       <asp:TextBox ID="txtGTotal" runat="server"></asp:TextBox> 
      </FooterTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField> 
      <FooterStyle /> 
     </asp:TemplateField> 

    </Columns> 
</asp:GridView> 

<asp:Button ID="btnAddNewRow" runat="server" Text="Add New Row" OnClick="btnAddNewRow_Click" /> 

 

GenInvoice.aspx.cs

012,351,641 난 당신의 코드를 통해 간으로
public partial class GenInvoice : System.Web.UI.Page 
{ 

    private double subTotal = 0; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     //GridView1.RowDataBound += new GridViewRowEventHandler(GridView1_RowDataBound); 

     if (!Page.IsPostBack) 
     { 
      SetInitialRow(); 
     } 
    } 

    private void SetInitialRow() 
    { 

     DataTable dt = new DataTable(); 

     DataRow dr = null; 

     //dt.Columns.Add(new DataColumn("RowNumber", typeof(string))); 
     dt.Columns.Add(new DataColumn("Row Number", typeof(string))); 
     dt.Columns.Add(new DataColumn("Category", typeof(string))); 
     dt.Columns.Add(new DataColumn("Type", typeof(string))); 
     dt.Columns.Add(new DataColumn("Model No", typeof(string))); 
     dt.Columns.Add(new DataColumn("Description", typeof(string))); 
     dt.Columns.Add(new DataColumn("Quantity", typeof(string))); 
     dt.Columns.Add(new DataColumn("Unit Price", typeof(string))); 
     dt.Columns.Add(new DataColumn("Sub-Total", typeof(string))); 
     dr = dt.NewRow(); 

     dr["Row Number"] = 1; 
     dr["Category"] = string.Empty; 
     dr["Type"] = string.Empty; 
     dr["Model No"] = string.Empty; 
     dr["Description"] = string.Empty; 
     dr["Quantity"] = string.Empty; 
     dr["Unit Price"] = string.Empty; 
     dr["Sub-Total"] = string.Empty; 

     dt.Rows.Add(dr); 

     dr = dt.NewRow(); 

     //Store the DataTable in ViewState 
     ViewState["CurrentTable"] = dt; 

     GridView1.DataSource = dt; 
     GridView1.DataBind(); 

    } 

    private void AddNewRowToGrid() 
    { 

     int rowIndex = 0; 

     if (ViewState["CurrentTable"] != null) 
     { 

      DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"]; 
      DataRow drCurrentRow = null; 

      if (dtCurrentTable.Rows.Count > 0) 
      { 

       for (int i = 1; i <= dtCurrentTable.Rows.Count; i++) 
       { 

        //extract the TextBox values 

        //TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1"); 
        //TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2"); 
        //DropDownList ddlProductType = (DropDownList)Gridview1.Rows[rowIndex].Cells[2].FindControl("ddlProductType"); 
        DropDownList ddlCategory = (DropDownList)GridView1.Rows[rowIndex].Cells[1].FindControl("ddlCategory"); 
        DropDownList ddlType = (DropDownList)GridView1.Rows[rowIndex].Cells[2].FindControl("ddlType"); 
        DropDownList ddlModelNo = (DropDownList)GridView1.Rows[rowIndex].Cells[3].FindControl("ddlModelNo"); 
        Label lblDescription = (Label)GridView1.Rows[rowIndex].Cells[4].FindControl("lblDescription"); 
        TextBox txtQuantity = (TextBox)GridView1.Rows[rowIndex].Cells[5].FindControl("txtQuantity"); 
        TextBox txtUPrice = (TextBox)GridView1.Rows[rowIndex].Cells[6].FindControl("txtUPrice"); 
        TextBox txtSTotal = (TextBox)GridView1.Rows[rowIndex].Cells[7].FindControl("txtSTotal"); 


        drCurrentRow = dtCurrentTable.NewRow(); 

        drCurrentRow["Row Number"] = i + 1; 
        //dtCurrentTable.Rows[i - 1]["Category"] = box1.Text; 
        dtCurrentTable.Rows[i - 1]["Category"] = ddlCategory.Text; 
        dtCurrentTable.Rows[i - 1]["Type"] = ddlType.Text; 
        dtCurrentTable.Rows[i - 1]["Model No"] = ddlModelNo.Text; 
        dtCurrentTable.Rows[i - 1]["Description"] = lblDescription.Text; 
        dtCurrentTable.Rows[i - 1]["Quantity"] = txtQuantity.Text; 
        dtCurrentTable.Rows[i - 1]["Unit Price"] = txtUPrice.Text; 
        dtCurrentTable.Rows[i - 1]["Sub-Total"] = txtSTotal.Text; 

        rowIndex++; 

       } 

       dtCurrentTable.Rows.Add(drCurrentRow); 
       ViewState["CurrentTable"] = dtCurrentTable; 

       GridView1.DataSource = dtCurrentTable; 
       GridView1.DataBind(); 

      } 

     } 

     else 
     { 
      Response.Write("ViewState is null"); 
     } 
     //Set Previous Data on Postbacks 
     SetPreviousData(); 

    } 

    private void SetPreviousData() 
    { 

     int rowIndex = 0; 

     if (ViewState["CurrentTable"] != null) 
     { 
      DataTable dt = (DataTable)ViewState["CurrentTable"]; 

      if (dt.Rows.Count > 0) 
      { 

       for (int i = 0; i < dt.Rows.Count; i++) 
       { 

        //TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1"); 
        //TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2"); 
        //DropDownList ddlProductType = (DropDownList)Gridview1.Rows[rowIndex].Cells[2].FindControl("ddlProductType"); 
        DropDownList ddlCategory = (DropDownList)GridView1.Rows[rowIndex].Cells[1].FindControl("ddlCategory"); 
        DropDownList ddlType = (DropDownList)GridView1.Rows[rowIndex].Cells[2].FindControl("ddlType"); 
        DropDownList ddlModelNo = (DropDownList)GridView1.Rows[rowIndex].Cells[3].FindControl("ddlModelNo"); 
        Label lblDescription = (Label)GridView1.Rows[rowIndex].Cells[4].FindControl("lblDescription"); 
        TextBox txtQuantity = (TextBox)GridView1.Rows[rowIndex].Cells[5].FindControl("txtQuantity"); 
        TextBox txtUPrice = (TextBox)GridView1.Rows[rowIndex].Cells[6].FindControl("txtUPrice"); 
        TextBox txtSTotal = (TextBox)GridView1.Rows[rowIndex].Cells[7].FindControl("txtSTotal"); 


        ddlCategory.Text = dt.Rows[i]["Category"].ToString(); 
        ddlType.Text = dt.Rows[i]["Type"].ToString(); 
        ddlModelNo.Text = dt.Rows[i]["Model No"].ToString(); 
        lblDescription.Text = dt.Rows[i]["Description"].ToString(); 
        txtQuantity.Text = dt.Rows[i]["Quantity"].ToString(); 
        txtUPrice.Text = dt.Rows[i]["Unit Price"].ToString(); 
        txtSTotal.Text = dt.Rows[i]["Sub-Total"].ToString(); 

        rowIndex++; 

       } 

      } 

     } 

    } 

    protected void btnAddNewRow_Click(object sender, EventArgs e) 
    { 
     AddNewRowToGrid(); 
    } 

    private void Calc() 
    { 
     double grandtotal = 0.0; 

     foreach (GridViewRow dr in GridView1.Rows) 
     { 
      double price = Convert.ToDouble(((TextBox)dr.FindControl("txtUPrice")).Text); 

      //double price = double.Parse(((TextBox)dr.FindControl("txtUPrice")).Text); 
      int qty = int.Parse(((TextBox)dr.FindControl("txtQuantity")).Text); 

      //Calculates Sub-Total 
      double total = price * qty; 

      //Displays Sub-Total 
      ((TextBox)dr.FindControl("txtSTotal")).Text = Convert.ToString(total); 
      //Calculates GrandTotal 
      grandtotal = grandtotal + total; 

     } 
     //Displays Grand Total 
     GridViewRow row = GridView1.FooterRow; 
     ((TextBox)row.FindControl("txtGTotal")).Text = Convert.ToString(grandtotal); 
    } 


    protected void ddlType_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     foreach (GridViewRow dr in GridView1.Rows) 
     { 
      //string type = Convert.ToString(((DropDownList)dr.FindControl("ddlType")).Text); 

      DropDownList ddlType = (DropDownList)dr.FindControl("ddlType"); 
      DropDownList ddlModelNo = (DropDownList)dr.FindControl("ddlModelNo"); 

      //ddlModelNo.Items.Clear(); 
      //if (type == "Cupboard") 
      //{ 

      MySqlConnection con = new MySqlConnection("server=localhost;userid=root;password=;database=obsystem"); 
      con.Open(); 

      //MySqlCommand cmd = new MySqlCommand("SELECT productID FROM product WHERE productType='" + typeCupboard + "'", con); 
      MySqlCommand cmd2 = new MySqlCommand("SELECT productID FROM product WHERE productType='" + ddlType.SelectedValue + "'", con); 

      MySqlDataAdapter da1 = new MySqlDataAdapter(cmd2); 

      DataSet ds1 = new DataSet(); 
      da1.Fill(ds1); 

      ddlModelNo.DataSource = ds1; 
      ddlModelNo.DataValueField = "productID"; 
      ddlModelNo.DataTextField = "productID"; 
      ddlModelNo.DataBind(); 

      ddlModelNo.Items.Insert(0, new ListItem("Please Select", "Please Select")); 

      Session["ddlTypeValue"] = ddlType.SelectedValue; 
     } 
    } 

    protected void ddlCategory_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     foreach (GridViewRow dr in GridView1.Rows) 
     { 
      //string type = Convert.ToString(((DropDownList)dr.FindControl("ddlType")).Text); 

      DropDownList ddlCat = (DropDownList)dr.FindControl("ddlCategory"); 
      //DropDownList ddlModelNo = (DropDownList)dr.FindControl("ddlModelNo"); 

      Session["ddlCat"] = ddlCat.SelectedValue; 


      string category = Convert.ToString(((DropDownList)dr.FindControl("ddlCategory")).Text); 

      if (category == "Carpets") 
      { 

       DropDownList ddlType = (DropDownList)dr.FindControl("ddlType"); 


       MySqlConnection con = new MySqlConnection("server=localhost;userid=root;password=;database=obsystem"); 
       con.Open(); 

       MySqlCommand cmd = new MySqlCommand("SELECT carpets FROM producttypecarpets", con); 

       MySqlDataAdapter da = new MySqlDataAdapter(cmd); 
       //MySqlDataReader dz = cmd.ExecuteReader(); 
       DataSet ds = new DataSet(); 
       da.Fill(ds); 

       ddlType.DataSource = ds; 
       ddlType.DataValueField = "carpets"; 
       ddlType.DataTextField = "carpets"; 
       ddlType.DataBind(); 

       ddlType.Items.Insert(0, new ListItem("Please Select", "Please Select")); 
      } 

      if (category == "Electrical Appliances") 
      { 
       DropDownList ddlType = (DropDownList)dr.FindControl("ddlType"); 

       MySqlConnection con = new MySqlConnection("server=localhost;userid=root;password=;database=obsystem"); 
       con.Open(); 

       MySqlCommand cmd = new MySqlCommand("SELECT electrical FROM producttypeelectrical", con); 

       MySqlDataAdapter da = new MySqlDataAdapter(cmd); 
       //MySqlDataReader dz = cmd.ExecuteReader(); 
       DataSet ds = new DataSet(); 
       da.Fill(ds); 

       ddlType.DataSource = ds; 
       ddlType.DataValueField = "electrical"; 
       ddlType.DataTextField = "electrical"; 
       ddlType.DataBind(); 

       ddlType.Items.Insert(0, new ListItem("Please Select", "Please Select")); 
      } 

      if (category == "Furnitures") 
      { 
       DropDownList ddlCategory = (DropDownList)dr.FindControl("ddlCategory"); 
       DropDownList ddlType = (DropDownList)dr.FindControl("ddlType"); 


       //DropDownList ddlModelNo = (DropDownList)dr.FindControl("ddlModelNo"); 
       //Label lblDescription = (Label)dr.FindControl("lblDescription"); 
       //TextBox txtUPrice = (TextBox)dr.FindControl("txtUPrice"); 

       //string catFurnitures = "Furnitures"; 

       MySqlConnection con = new MySqlConnection("server=localhost;userid=root;password=;database=obsystem"); 
       con.Open(); 

       MySqlCommand cmd = new MySqlCommand("SELECT DISTINCT productType FROM product WHERE productCategory='" + ddlCategory.SelectedValue + "'", con); 

       MySqlDataAdapter da = new MySqlDataAdapter(cmd); 
       //MySqlDataReader dz = cmd.ExecuteReader(); 
       DataSet ds = new DataSet(); 
       da.Fill(ds); 

       ddlType.DataSource = ds; 
       ddlType.DataValueField = "productType"; 
       ddlType.DataTextField = "productType"; 
       ddlType.DataBind(); 

       ddlType.Items.Insert(0, new ListItem("Please Select", "Please Select")); 

      } 

      //if (category == "Others") 
      //Type(); 

      //GridView1.DataBind(); 
     } 
    } 

    protected void ddlModelNo_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     foreach (GridViewRow dr in GridView1.Rows) 
     { 
      string type = Convert.ToString(((DropDownList)dr.FindControl("ddlType")).Text); 

      DropDownList ddlType = (DropDownList)dr.FindControl("ddlType"); 
      DropDownList ddlModelNo = (DropDownList)dr.FindControl("ddlModelNo"); 
      Label lblDescription = (Label)dr.FindControl("lblDescription"); 
      TextBox txtUPrice = (TextBox)dr.FindControl("txtUPrice"); 

      //if (type == "Cupboard") 
      //{ 

      MySqlConnection con = new MySqlConnection("server=localhost;userid=root;password=;database=obsystem"); 
      con.Open(); 

      //MySqlCommand cmd = new MySqlCommand("SELECT productID FROM product WHERE productType='" + typeCupboard + "'", con); 
      MySqlCommand cmd2 = new MySqlCommand("SELECT productDesc,productSellingPrice FROM product WHERE productID='" + ddlModelNo.SelectedValue + "'", con); 

      MySqlDataAdapter da1 = new MySqlDataAdapter(cmd2); 

      MySqlDataReader myDataReader = cmd2.ExecuteReader(); 


      while (myDataReader.Read()) 
      { 
       //ddlCompanyName.Items.Add(dr["compName"].ToString()); 
       lblDescription.Text = myDataReader["productDesc"].ToString(); 
       txtUPrice.Text = myDataReader["productSellingPrice"].ToString(); 
      } 



      DataSet ds1 = new DataSet(); 
      da1.Fill(ds1); 

      ddlModelNo.DataSource = ds1; 
      ddlModelNo.DataValueField = "productID"; 
      ddlModelNo.DataTextField = "productID"; 
      ddlModelNo.DataBind(); 
     } 
    } 

    protected void txtQuantity_TextChanged(object sender, EventArgs e) 
    { 
     Calc(); 
    } 

} 
+0

가 업데이트 패널 – Anuj

+0

아누 즈 그리드의 당신의 디자인을 넣어 어떤 경우 말해, 난 여전히 asp.net 및 C#에 새로 온 사람으로 죄송합니다. 관련이있을 수있는 예제 또는 링크를 제공 할 수 있습니까? – Shilpesh

+0

DropPorts에 AutoPostBack 속성 = True를 설정 했습니까? – Anuj

답변

0

난 당신이

ddlCategory.Text = dt.Rows[i]["Category"].ToString(); 
        ddlType.Text = dt.Rows[i]["Type"].ToString(); 
        ddlModelNo.Text = dt.Rows[i]["Model No"].ToString(); 

실제로 당신이 선택하기 전에 드롭 다운을 채울 수있는이

fillCategory(); 

if(ddlCategory.items.contains(ddlCategory.items.FindByText(dt.Rows[i]["Category"].ToString()))) 
{ 
ddlCategory.clearselection(); 
ddlCategory.items.FindByText(dt.Rows[i]["Category"].ToString()).Selected=True; 
} 
    fillType(); 
if(ddlType.items.contains(ddlType.items.FindByText(dt.Rows[i]["Type"].ToString()))) 
{ 
ddlType.clearselection(); 
ddlType.items.FindByText(dt.Rows[i]["Type"].ToString()).Selected=True; 
}  
fillModel(); 
if(ddlModelNo.items.contains(ddlModelNo.items.FindByText(dt.Rows[i]["Model No"].ToString()))) 
{ 
ddlModelNo.clearselection(); 
ddlModelNo.items.FindByText(dt.Rows[i]["Model No"].ToString()).Selected=True; 
}  

같아야 작성 근래 그쪽을 발견했습니다. 변경하십시오.

하고 솔루션을 가지고 여부

+0

Anuj에게 감사하지만 여전히 작동하지 않습니다. – Shilpesh

+0

"예외 정보 : System.NullReferenceException : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다."오류 발생. 당신이 바꾸라고 제안한 줄에. – Shilpesh

+0

그 오류는 드롭 다운 didnot 때문에 드롭 다운을 먼저 작성하고 내가 제안한 그 코드를 써야만하기 때문에 어떤 게시물이 있었는지 확인했습니다. 내 게시물에 대한 변경 사항을 확인하십시오. – Anuj

관련 문제