2013-06-18 3 views
0

В настоящее время я делаю проект по созданию счетов-фактур для малых и средних компаний.Как сохранить значение для dropdownlists в gridview

У меня есть 3 dropdownlists (DDL).

Первый DROPDOWNLIST (Категория продукта) уже установлена ​​на 4 ListItem, то есть ковры, мебель и т.д.

При выборе из первого DDL, второй DropDownList (Тип продукта) будет извлекать данные из сопоставления базы данных в выбранное значение из первого DDL.

Аналогично при выборе второго DDL, третий раскрывающийся список (идентификатор продукта) будет извлекать данные из базы данных, соответствующие выбранному значению из второго DDL.

В-третьих, при выборе из третьего DDL текстовые поля (Product Description, Unit Price) будут заполнены данными, полученными из базы данных, соответствующей выбранному значению в третьем DDL.

Теперь проблема заключается в том, что я нажимаю кнопку «Добавить новую строку», которая динамически добавляет новую строку при каждом нажатии, выбранное значение во втором и третьем DDL больше не существует, но значения в текстовых окнах остаются там.

Может ли кто-нибудь помочь мне сохранить значения для второго и третьего 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

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

Вы установили свойство 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

, что ошибка возникла из-за того, что в раскрывающемся списке нет элемента, для чего вам нужно сначала заполнить раскрывающийся список и написать код, который я предложил, проверить изменения, внесенные мной на мой пост – Anuj

Смежные вопросы