【问题标题】:Gridview Add Columns Dynamically Using Code BehindGridview 使用后面的代码动态添加列
【发布时间】:2012-02-16 16:05:58
【问题描述】:

我正在尝试使用 C# 代码动态创建列,我需要创建一个带有文本框的列,我该如何继续这样做?这是我的代码:

protected void loadTable()
{
    gv_productDesc.Columns.Clear();
    SqlConnection con = new SqlConnection();
    con.ConnectionString = ConfigurationManager.ConnectionStrings["UserCS"].ConnectionString;

    string sql = "SELECT * FROM ItemTable WHERE categoryId=@pcategoryId";
    SqlCommand cmd = new SqlCommand(sql, con);

    cmd.Parameters.AddWithValue("@pcategoryId", ddl_category.SelectedValue);

    SqlDataReader dr;
    DataTable dt = new DataTable();

    try
    {
        con.Open();
        dr = cmd.ExecuteReader();
        dt.Load(dr);

        /*BoundField itemname = new BoundField();
        itemname.HeaderText = "Item Name";
        itemname.HeaderStyle.CssClass = "gridPadding";
        itemname.DataField = "itemName";
        itemname.ItemStyle.CssClass = "gridPadding";
        itemname.ItemStyle.Font.Bold = true;
        itemname.ItemStyle.Width = 225;
        gv_productDesc.Columns.Add(itemname);*/

        ButtonField btnfield = new ButtonField();
        btnfield.HeaderText = "Item Name";
        btnfield.HeaderStyle.CssClass = "gridPadding";
        btnfield.ButtonType = ButtonType.Link;
        btnfield.DataTextField = "itemName";
        btnfield.CommandName = "lala";
        btnfield.ItemStyle.CssClass = "linkcss";
        btnfield.ItemStyle.Width = 225;
        gv_productDesc.Columns.Add(btnfield);

        BoundField itemprice = new BoundField();
        itemprice.HeaderText = "Item Price ($)";
        itemprice.HeaderStyle.CssClass = "gridPadding";
        itemprice.DataField = "unitPrice";
        itemprice.ItemStyle.CssClass = "gridPadding";
        itemprice.ItemStyle.Font.Bold = true;
        itemprice.ItemStyle.Width = 100;
        gv_productDesc.Columns.Add(itemprice);

        BoundField itemdescHidden = new BoundField();
        itemdescHidden.HeaderText = "Item Description";
        itemdescHidden.DataField = "description";
        itemdescHidden.HtmlEncode = false;
        itemdescHidden.ItemStyle.Width = 0;
        gv_productDesc.Columns.Add(itemdescHidden);

        BoundField itemdesc = new BoundField();
        itemdesc.HeaderText = "Item Description";
        itemdesc.HeaderStyle.CssClass = "gridPadding";
        itemdesc.ItemStyle.CssClass = "gridPadding";
        itemdescHidden.DataField = "description";
        itemdesc.HtmlEncode = false;
        itemdesc.ItemStyle.HorizontalAlign = HorizontalAlign.Left;
        itemdesc.ItemStyle.Width = 320;
        gv_productDesc.Columns.Add(itemdesc);

        ImageField itemimage = new ImageField();
        itemimage.HeaderText = "Item Image";
        itemimage.HeaderStyle.CssClass = "gridPadding";
        itemimage.DataImageUrlField = "image";
        itemimage.ItemStyle.CssClass = "gridPadding";
        itemimage.ItemStyle.Width = 225;
        itemimage.ControlStyle.Width = 225;
        gv_productDesc.Columns.Add(itemimage);



        gv_productDesc.DataSource = dt;
        gv_productDesc.DataBind();
        gv_productDesc.Columns[2].Visible = false;
    }
    catch (Exception ex)
    {
        lb_msg2.Text = "Error Encountered : " + ex.Message;
    }
    finally
    {
        con.Close();
        con.Dispose();
        cmd.Dispose();
    }
}

我尝试将列添加到主页(example.aspx)中的 GridView,但是当我将值绑定到 GridView 时,该列消失了。

【问题讨论】:

    标签: gridview code-behind


    【解决方案1】:

    到 GridView 的数据绑定将始终根据数据源返回的列重绘 GridView。在您的情况下,您要么需要将列添加为数据源的一部分,要么设置 AutoGenerateColumns="False"

    更新

    按照我上面的原始评论,将数据表绑定到 gridview 的代码放置您的动态控件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多