当前位置:编程学习 > C#/ASP.NET >>

关于GridView的问题(求高手指点)

当我点击“增加”按钮时,GridView会自动生成新的一行。这样的代码怎么写(C#)???
请高手指点~~~O(∩_∩)O谢谢 --------------------编程问答-------------------- 你想新加的那一行是有数据的,还是空的?
做法就是在gridview的数据源上加一行,假设你给gridview.datasource赋的值是dt
那就是给dt加一行,dr = dt.Newrow     dr(0) = ...  dr(1) = ...  dt.AddRow(dr)
然后把加了一行后的dt,重新赋给gridview的datasource,然后gridview.databind()
--------------------编程问答-------------------- ADDROW方法 --------------------编程问答-------------------- 方法一.用xml+webservice做一個偽gridview。
方法二.就是點增加,datatable新增一行,然後gridview再綁定這個新的datatable. --------------------编程问答-------------------- 继承模板类 
  ICollection CreateDataSource()
    {
        DataTable dt = new DataTable();
        DataRow dr;
        dt.Columns.Add(new DataColumn("id", typeof(Int32)));
        dt.Columns.Add(new DataColumn("text", typeof(string)));
        for (int i = 0; i < 6; i++)
        {
            dr = dt.NewRow();
            dr[0] = i;
            dr[1] = "列表" + i.ToString();
            dt.Rows.Add(dr);
        }
        DataView dv = new DataView(dt);
        return dv;
    }
    public class GridViewTemplate : ITemplate
    {
        private DataControlRowType dcrType;
        private string columnName;
        public GridViewTemplate(DataControlRowType type, string colname)
        {
            dcrType = type;
            columnName = colname;
        }
        public void InstantiateIn(System.Web.UI.Control container)
        {
            switch (dcrType)
            {
                case DataControlRowType.Header:
                    Literal literal = new Literal();
                    literal.Text = columnName;
                    container.Controls.Add(literal);
                    break;
                case DataControlRowType.DataRow:
                    DropDownList ddl = new DropDownList();
                    ddl.ID = "dropdownlist";
                    ddl.AppendDataBoundItems = true;
                    ddl.Items.Add(new ListItem("-----请选择------", ""));
                    ddl.Items.Add(new ListItem("AA", "a"));
                    ddl.Items.Add(new ListItem("BB", "b"));
                    ddl.Items.Add(new ListItem("CC", "c"));
                    container.Controls.Add(ddl);
                    break;
                default:
                    break;
            }
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        for (int index = 1; index < GridView1.Columns.Count; index++)
        {
            GridView1.Columns[index].Visible = false;
        }
        for (int i = 0; i < Convert.ToInt32(DropDownList1.SelectedValue); i++)
        {
            TemplateField tf = new TemplateField();
            tf.ShowHeader = true;
            tf.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "动态添加列");
            tf.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "");
            GridView1.Columns.Add(tf);
            GridView1.DataSource = CreateDataSource();
            GridView1.DataBind();
        }
    } --------------------编程问答-------------------- DataTable dt = new DataTable();

        dt.Columns.Add("id");
        dt.Columns.Add("name");
        DataRow dr = dt.NewRow();
        dr["id"] = "";
        dr["name"] = "";
        dt.Rows.Add(dr);

       this.GridView1.DataSource = dt;
       this.GridView1.DataBind();
      GridView1.EditIndex =dt.Rows.Cunt -1; 
     dt.Dispose();
http://topic.csdn.net/u/20090115/11/0674c008-c204-428a-a3f4-1bc726cd0fae.html --------------------编程问答-------------------- 如果你想通过新增行填写gridview值,可以通过footer模板列,前台可以这么写模板
<asp:TemplateField HeaderText="产品名称">
<FooterTemplate>
<asp:TextBox ID="ProcessPriceA" onblur="price();" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
后台按钮事件
protected void add_Click(object sender, EventArgs e)
    {
        GridView1.ShowFooter = true;
        GridView1.DataSource = DT;
        GridView1.DataBind();
    }
把footer模板显示出来
然后在footer模板列中做个确定按钮把新增的数据填写到数据源中,重新绑定下gridview,就ok了!
当然这个过程没那么简单,需要代码,可以找我! --------------------编程问答--------------------
引用 5 楼 wuyq11 的回复:
DataTable dt = new DataTable();

        dt.Columns.Add("id");
        dt.Columns.Add("name");
        DataRow dr = dt.NewRow();
        dr["id"] = "";
        dr["name"] = "";
        dt.Rows.Add(dr);

      this.GridView1.DataSource = dt;
      this.GridView1.DataBind();
      GridView1.EditIndex =dt.Rows.Cunt -1;
    dt.Dispose();
http://topic.csdn.net/u/20090115/11/0674c008-c204-428a-a3f4-1bc726cd0fae.html


非常感谢,新的一行出来了,可当往新行里插入值时,却不知怎么才能保存到数据库中??? --------------------编程问答-------------------- 在新增时给绑定数据源加一空行数据。楼上已经说了。保存GRIDVIEW有个GridView1_Updating事件,在该事件写个要插入的数据即可。 
给你个例子,判断是新增还是更新。注意AddRow值 
protected void GridView1_Updating(object sender, GridViewUpdateEventArgs e)
    {
          if (AddRow == true)
        {
       string sSql = "insert into *** values(*****)";

            Grid.ExeSql(sSql);

        }
        else
        {
            string sSql = "update *** set ****'";

            Grid.ExeSql(sSql);

        }
  
        AddRow = false;
    } --------------------编程问答--------------------
  在点击按钮新增一行的时候
       DataSet ds = new DataSet();
         ds = ....
        DataTable dt = ds.Tables[0];
        if (dt.Rows.Count >= 0)
        {
            DataRow dr = dt.NewRow();
            dt.Rows.Add(dr);
        }
        this.GridView1.DataSource = dt;
        GridView1.DataBind(); 
--------------------编程问答-------------------- 这个代码示例里面有,你自己看看
http://files.cnblogs.com/huangjianhuakarl/Gridview.rar --------------------编程问答-------------------- 在”增除删改“中的GridviewInsertRecord.aspx页面就是,通过footer模板列,完全能实现你想要效果 --------------------编程问答-------------------- UP
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,