Click here to Skip to main content
15,892,674 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
C#
DataTable dt = new DataTable();
            DataColumn cl = new DataColumn("From");
            dt.Columns.Add(cl);
            cl = new DataColumn("To");
            dt.Columns.Add(cl);

            DataColumn cl1 = new DataColumn("Area");
            dt.Columns.Add(cl1);
            cl1 = new DataColumn("Sector");
            dt.Columns.Add(cl1);

            DataColumn cl2 = new DataColumn("CompanyName");
            dt.Columns.Add(cl2);
            cl2 = new DataColumn("Description");
            dt.Columns.Add(cl2);


                DataRow dr = dt.NewRow();
                dr[0] = TextBoxFrom.Text;
                dr[1] = TextBoxTo.Text;
                dr[2] = TextBoxArea.Text;
                dr[3] = TextBoxSector.Text;
                dr[4] = TextBoxCompanyName.Text;
                dr[5] = TextBoxDescription.Text;
                dt.Rows.Add(dr);

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


Is i possible to foreach this code in some way so every time the user enter something in the textboxes and presses the button it adds the values in the gridview under each other.
Right now this code overwrites so i only can have one line in the gridview
Posted
Updated 21-Mar-13 3:24am
v8

C#
DataTable dt = new DataTable();

dt.Columns.Add("FName");
dt.Columns.Add("LName");

DataRow dr = dt.NewRow();
dr["FName"] = "Deependra";
dr["LName"] = "Singh";
dt.Rows.Add(dr);

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

foreach (GridViewRow row in GridViewAllAssigments.Rows)
{
    lbl1 = (Label)row.FindControl("Label1");
    lbl2 = (Label)row.FindControl("Label2");

    if (lbl1 != null)
        lbl1.Text = Textbox1.text;

    if (lbl2 != null)
        lbl2.Text = Textbox2.text;
}
 
Share this answer
 
v4
Try below..
Html below..
ASP.NET
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
           <Columns>
               <asp:BoundField DataField="RowNumber" HeaderText="Row Number" />
               <asp:TemplateField HeaderText="From">
                   <ItemTemplate>
                       <asp:Label ID="Label1" runat="server" />
                   </ItemTemplate>
               </asp:TemplateField>
               <asp:TemplateField HeaderText="To">
                   <ItemTemplate>
                       <asp:Label ID="Label2" runat="server" />
                   </ItemTemplate>
               </asp:TemplateField>
           </Columns>
       </asp:GridView>
       <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:TextBox ID="TextBox2"
           runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" Text="Button"
               OnClick="Button1_Click" />


Code behind..
C#
protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            SetInitialRow();
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        AddNewRowToGrid();
    }
    private void SetInitialRow()
    {
        DataTable dt = new DataTable();
        DataRow dr = null;
        dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
        dt.Columns.Add(new DataColumn("From", typeof(string)));
        dt.Columns.Add(new DataColumn("To", typeof(string)));
        dr = dt.NewRow();
        dr["RowNumber"] = 1;
        dr["From"] = string.Empty;
        dr["To"] = 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)
            {
                int row = dtCurrentTable.Rows.Count;
                //extract the TextBox values
                Label box1 = (Label)GridView1.Rows[rowIndex].Cells[1].FindControl("Label1");
                Label box2 = (Label)GridView1.Rows[rowIndex].Cells[2].FindControl("Label2");
                drCurrentRow = dtCurrentTable.NewRow();
                drCurrentRow["RowNumber"] = row + 1;
                dtCurrentTable.Rows[row - 1]["From"] = TextBox1.Text;
                dtCurrentTable.Rows[row - 1]["To"] = TextBox2.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++)
                {
                    Label box1 = (Label)GridView1.Rows[rowIndex].Cells[1].FindControl("Label1");
                    Label box2 = (Label)GridView1.Rows[rowIndex].Cells[2].FindControl("Label2");
                    box1.Text = dt.Rows[i]["From"].ToString();
                    box2.Text = dt.Rows[i]["To"].ToString();
                    rowIndex++;
                }
            }
        }
    }
 
Share this answer
 
v2
C#
Modify the code previous i posted.
using session or viewstate add more records to gridview.

aspx.cs:
 protected void btnclick_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        if (Session["DataTable"] != null)
        {
            dt = (DataTable)Session["DataTable"];
        }
        else
        {
            DataColumn cl = new DataColumn("From");
            dt.Columns.Add(cl);
            cl = new DataColumn("To");
            dt.Columns.Add(cl);
        }

        //-- add first row in datatable
        DataRow dr = dt.NewRow();
        dr[0] = txt1.Text;
        dr[1] = txt2.Text;
        dt.Rows.Add(dr);
        grdview.DataSource = dt;
        grdview.DataBind();
        Session["DataTable"] = dt;
    }
 
Share this answer
 
v2
hi Kurac1,
Try this code. hope it helpful...

XML
<asp:TextBox ID="txt1" runat="server"></asp:TextBox>
   <asp:TextBox ID="txt2" runat="server"></asp:TextBox>
   <asp:Button ID="btnclick" Text="click" runat="server" OnClick="btnclick_Click" />
   <asp:GridView ID="grdview" runat="server" EnableModelValidation="True" AutoGenerateColumns="False">
       <Columns>
           <asp:TemplateField HeaderText="From">
               <ItemTemplate>
                   <asp:Label ID="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"From")%>' />
               </ItemTemplate>
           </asp:TemplateField>
           <asp:TemplateField HeaderText="To">
               <ItemTemplate>
                   <asp:Label ID="Label2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"To")%>' />
               </ItemTemplate>
           </asp:TemplateField>
       </Columns>
   </asp:GridView>



aspx.cs:
protected void btnclick_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
DataColumn cl = new DataColumn("From");
dt.Columns.Add(cl);
cl = new DataColumn("To");
dt.Columns.Add(cl);

//-- add first row in datatable
DataRow dr = dt.NewRow();
dr[0] = txt1.Text;
dr[1] = txt2.Text;
dt.Rows.Add(dr);
grdview.DataSource = dt;
grdview.DataBind();
}
 
Share this answer
 
v2
Comments
vinodkumarnie 21-Mar-13 8:25am    
Do you check new rows will add..?

Your code will insert only one row.. Please check..
sainadh.chintha 21-Mar-13 8:46am    
it is for example.just try for solution in ur way.

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