Click here to Skip to main content
15,900,110 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
hi all, I'm very new to dotnet programming. I'm using c#. as per requirement I'm desiging order taking form from customer in a project. In that form, when u run the form(click on order button) empty grid should load and it should contain 5 columns (S.No auto generation, item (dropdown list), mrp (label),quantity(text box), total cost(label)). after enter/taking first item details, grid must display additional row with all controls(i.e dropdown list, labels, text box etc). it may be in button click event which in template field or in footer row also. after taking complete oreder the entire oreder must save in db.
I've tried alot I'm succeeded upto displaying empty grid(with no conn db), relavant all controls all displaying & working.i.e.,mrp of selected item in dropdownlist displaying in mrp label. after enter quntity in textbox, total cost is diplaying at tcost label. I'm stucked at adding new row.
I've used html for designing:

XML
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
     <table>
     <tr>
     <td>
         <asp:Label ID="Label3" runat="server" Text="Order Id"></asp:Label></td>
         <td>
             <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox></td>
     </tr>
     </table>
    </div>
    <asp:GridView ID="grdv" ShowFooter="false" AutoGenerateColumns="False" runat="server"
            onrowdatabound="grdv_RowDataBound"
        onselectedindexchanged="grdv_SelectedIndexChanged"
              OnRowCommand="grdv_RowCommand">
        <Columns>
                <asp:TemplateField HeaderText="SNO">
                <ItemTemplate>
                <%#Container.DataItemIndex + 1 %>
                </ItemTemplate>
                <%--</asp:TemplateField>
                <asp:TemplateField HeaderText="orderid">
                <ItemTemplate>
                <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                </ItemTemplate>--%>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="item">
                <ItemTemplate>
                <asp:DropDownList DataSource='<%# item() %>' DataTextField="itemname" DataValueField="itemname" ID="DropDownList1" runat="server" OnSelectedIndexChanged="dlist_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList>
                </ItemTemplate>
                <%--<EditItemTemplate>
                <asp:DropDownList DataSource='<%# item() %>' DataTextField="itemname" DataValueField="itemname" OnSelectedIndexChanged="dlist_SelectedIndexChanged" AutoPostBack="true" ID="DropDownList1" runat="server"></asp:DropDownList>
                </EditItemTemplate>--%>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="mrp">
                <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                </ItemTemplate>
               <%-- <EditItemTemplate>
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                </EditItemTemplate>--%>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="qty">
                <ItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" OnTextChanged="tb_TextChanged"  AutoPostBack="true"></asp:TextBox>
                </ItemTemplate>
                <%--<EditItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" OnTextChanged="tb_TextChanged"  AutoPostBack="true"></asp:TextBox>
                </EditItemTemplate>--%>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="tcost">
                <ItemTemplate>
                <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
                </ItemTemplate>
                <%--<EditItemTemplate>
                <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
                </EditItemTemplate>--%>
               </asp:TemplateField>
               <asp:TemplateField>
               <ItemTemplate>
               <asp:Button ID="btninsert" CommandName="Insert"  Text="InsertRow" runat="server" />
               </ItemTemplate>
               </asp:TemplateField>
         </Columns>
</asp:GridView>
    <asp:Button ID="btnaddrow" runat="server" onclick="Button2_Click" Text="add" />
<asp:Button ID="btinsert" runat="server" Text="insert" onclick="Button1_Click" />
    </form>
</body>
</html>



c# code:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public partial class Default2 : System.Web.UI.Page
{
    SqlConnection cn = new SqlConnection("Data Source=SYS42;Initial Catalog=gc;Integrated Security=True");
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        ShowEmptyRow(grdv);
    }
    DataTable table = new DataTable();
    public void ShowEmptyRow(GridView grid)
    {
        if (grid.Rows.Count == 0)
        {
            //table = new DataTable();
            for (int i = 0; i < grid.Columns.Count; ++i)
            {

                if (grid.Columns[i] is BoundField)
                {

                    table.Columns.Add((grid.Columns[i] as BoundField).DataField);
                }
                else
                {
                    table.Columns.Add(grid.Columns[i].SortExpression);
                }
            }
            table.Rows.Add(table.NewRow());
           // grid.DataSourceID = String.Empty;
            grid.DataSource = table;
            grid.DataBind();
            if (String.IsNullOrEmpty(grid.EmptyDataText) == false)
            {
                grid.Rows[0].Cells[0].ColumnSpan = table.Columns.Count;
                grid.Rows[0].Cells[0].Text = grid.EmptyDataText;
                while (grid.Rows[0].Cells.Count > 1)
                {
                    grid.Rows[0].Cells.RemoveAt(1);
                }
            }
        }        
        
    }
    public DataSet item()
    {
        SqlDataAdapter da = new SqlDataAdapter("select itemname from items", cn);
        DataSet d = new DataSet();
        da.Fill(d);
        return d;
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        for (int j = 0; j < grdv.Rows.Count; j++)
        {
            DropDownList itemname = (grdv.Rows[j].Cells[1].Controls[0].FindControl("DropDownList1")) as DropDownList;
            TextBox qty = (grdv.Rows[j].Cells[3].Controls[0].FindControl("TextBox1")) as TextBox;
            //TextBox id = (grdv.Rows[j].Cells[1].Controls[0].FindControl("TextBox3")) as TextBox; ;
            int id = Convert.ToInt32(TextBox2.Text);
            Label tcost = (grdv.Rows[j].Cells[4].Controls[0].FindControl("Label2")) as Label;
            cn.Open();
            SqlCommand cm = new SqlCommand("insert into orders (orderid,itemname,quantity,tcost)values('" + id+ "','" + itemname.SelectedItem.ToString() + "','" + qty.Text + "','" + tcost.Text + "')", cn);
            cm.ExecuteNonQuery();
            cn.Close();
        }
    }
    protected void grdv_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (Page.IsPostBack)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                DropDownList dlist = e.Row.FindControl("DropDownList1") as DropDownList;
                if (dlist != null)
                {
                    dlist.SelectedIndexChanged += new EventHandler(dlist_SelectedIndexChanged);
                }
            }
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                TextBox tb = e.Row.FindControl("TextBox1") as TextBox;
                if (tb != null)
                {
                    tb.TextChanged += new EventHandler(tb_TextChanged);
                }
            }
            //if (e.Row.RowType == DataControlRowType.DataRow)
            //{
            //    Button btn = e.Row.FindControl("btninsert") as Button;
            //    btn.Click += new EventHandler(btn_Click);
            //}
        }
    }

    //public void btn_Click(object sender, EventArgs e)
    //{
    //    if (grdv.Rows.Count != 0)
    //    {
    //        if (table.Rows.Count != 0)
    //        {

    //            for (int i = 0; i < grdv.Columns.Count; ++i)
    //            {

    //                if (grdv.Columns[i] is BoundField)
    //                {

    //                    table.Columns.Add((grdv.Columns[i] as BoundField).DataField);
    //                }
    //                else
    //                {
    //                    table.Columns.Add(grdv.Columns[i].SortExpression);
    //                }
    //            }
    //            table.Rows.Add(table.NewRow());
    //            grdv.DataSourceID = String.Empty;
    //            grdv.DataSource = table;
    //            grdv.DataBind();
    //            if (String.IsNullOrEmpty(grdv.EmptyDataText) == false)
    //            {
    //                grdv.Rows[0].Cells[0].ColumnSpan = table.Columns.Count;
    //                grdv.Rows[0].Cells[0].Text = grdv.EmptyDataText;
    //                while (grdv.Rows[0].Cells.Count > 1)
    //                {
    //                    grdv.Rows[0].Cells.RemoveAt(1);
    //                }
    //            }
    //        }

    //    }
    //}
    public void tb_TextChanged(object sender, EventArgs e)
    {
        //throw new NotImplementedException();
        TextBox tbqty = (TextBox)sender;
        GridViewRow grdrDropDownRow = ((GridViewRow)tbqty.Parent.Parent);
        Label lblCurrentStatus = (Label)grdrDropDownRow.FindControl("Label1");
        Label tcost = (Label)grdrDropDownRow.FindControl("Label2");
        if (tbqty != null && lblCurrentStatus.Text != "")
        {
            int mrp = Convert.ToInt32(lblCurrentStatus.Text);
            int quant = Convert.ToInt32(tbqty.Text);
            float price = mrp * quant;
            tcost.Text = price.ToString();
        }
        else
        {
            int mrp = Convert.ToInt32(lblCurrentStatus.Text);
            int quant = Convert.ToInt32(tbqty.Text);
            float price = mrp * quant;
            tcost.Text = price.ToString();
        }
    }
    public void dlist_SelectedIndexChanged(object sender, EventArgs e)
    {
        //throw new NotImplementedException();
        for (int a = 0; a < grdv.Rows.Count; a++)
        {
            DropDownList dl = sender as DropDownList;
            GridViewRow row = dl.NamingContainer as GridViewRow;
            int i = row.RowIndex;
            DropDownList ddlCurrentDropDownList = (DropDownList)sender;
            GridViewRow grdrDropDownRow = ((GridViewRow)ddlCurrentDropDownList.Parent.Parent);
            Label lblCurrentStatus = (Label)grdrDropDownRow.FindControl("Label1");
            TextBox tbqty = (TextBox)grdrDropDownRow.FindControl("TextBox1");
            if (Page.IsPostBack)
            {
                tbqty.Text = string.Empty;
            }
            cn.Open();
            SqlCommand cmd = new SqlCommand("select cost from items where itemname='" + ddlCurrentDropDownList.SelectedItem + "'", cn);
            int ss = Convert.ToInt32(cmd.ExecuteScalar());
            Label Label1 = (Label)grdv.Rows[i].Cells[2].FindControl("Label1");
            Label1.Text = ss.ToString();
            cn.Close();
        }
    }
    protected void grdv_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
    protected void grdv_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Insert")
        {
            if (grdv.Rows.Count != 0)
            {
                if (table.Rows.Count != 0)
                {

                    for (int i = 0; i < grdv.Columns.Count; ++i)
                    {

                        if (grdv.Columns[i] is BoundField)
                        {

                            table.Columns.Add((grdv.Columns[i] as BoundField).DataField);
                        }
                        else
                        {
                            table.Columns.Add(grdv.Columns[i].SortExpression);
                        }
                    }
                    table.Rows.Add(table.NewRow());
                    //grdv.DataSourceID = String.Empty;
                    grdv.DataSource = table;
                    grdv.DataBind();
                    if (String.IsNullOrEmpty(grdv.EmptyDataText) == false)
                    {
                        grdv.Rows[0].Cells[0].ColumnSpan = table.Columns.Count;
                        grdv.Rows[0].Cells[0].Text = grdv.EmptyDataText;
                        while (grdv.Rows[0].Cells.Count > 1)
                        {
                            grdv.Rows[0].Cells.RemoveAt(1);
                        }
                    }
                }

            }
        }
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
           ShowEmptyRow(grdv);
    }
    // private void SetInitialRow()
    //{
    //    DataTable dt = new DataTable();
    //    DataRow dr = null;
    //     dt.Columns.Add(new DataColumn("SNO", typeof(TemplateField)));
    //    dt.Columns.Add(new DataColumn("item", typeof(TemplateField)));
    //    dt.Columns.Add(new DataColumn("mrp", typeof(TemplateField)));
    //    dt.Columns.Add(new DataColumn("qty", typeof(TemplateField)));
    //    dt.Columns.Add(new DataColumn("tcost", typeof(TemplateField)));
    //    dr = dt.NewRow();
    //    dr["RowNumber"] = 1;
    //    dr["SNO"]=<%#Container.DataItemIndex + 1 %>;
    //    dr["item"] =(DropDownList)grdv.DataSource=<%# item() %>;
    //    dr["mrp"] = (Label)grdv;
    //     dr["qty"]=(TextBox)grdv;
    //     dr["tcost"]=(Label)grdv;
    //    dt.Rows.Add(dr);
    //    //dr = dt.NewRow();
 
    //    //Store the DataTable in ViewState
    //    ViewState["CurrentTable"] = dt;
    //    }
 
}


please anyone guide me regarding this.
Posted
Comments
Pandya Anil 15-Nov-11 7:55am    
what will happen after inserting a record to DB, will the record be editable ? or only last row will be editable ?

after clicking the insert button the data in grid should save in db thats all. If any one want to see that record they can view. In some situations , if editing needed then it should be editable. while priniting receipt(its another), by mentioning the orderid the total oreder(from order tbl) should print.here, I'm asking suggestion to add a new row after click on addnewrow button which is in gridview. the new row also should look like the first row only( i mean with all the controls).I don't know whether I've mentioning my requirement properly or not? But I hope as an expert u may understand what I mean was. so please guide me regarding this.
 
Share this answer
 
I've achieved the requirement by creating the row dynamically and adding the controls. in find cntrol field I've attached the existing control. It's working now.
I found the example at following link.

http://geekswithblogs.net/dotNETvinz/archive/2009/06/04/adding-dynamic-rows-in-gridview-with-textboxes.aspx.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900