【问题标题】:GridView is adding new rows, but is not displaying valuesGridView 正在添加新行,但不显示值
【发布时间】:2013-04-10 04:26:00
【问题描述】:

背景

所以我几天前才开始在ASP.Net 工作。在我的网页上,我正在为用户创建一个联系人表以填充然后提交到数据库。现在我让用户在各种文本框中输入信息,然后单击“添加联系人”按钮,然后将内容添加到存储在Session 对象中的DataTable。我的GridViewDataSourceDataTable

当前状态

更新点击事件代码

每当我单击“添加联系人”按钮时,我的GridView 中都会添加一个新行,但GridView 的单元格中没有显示任何内容。

代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            dt.Columns.Add("First", typeof(String));
            dt.Columns.Add("Last", typeof(String));
            dt.Columns.Add("Email", typeof(String));
            dt.Columns.Add("Phone", typeof(String));
            Session["TempTable"] = dt; 
            GridView1.DataSource = dt;
        }
        else
        {
            dt = (DataTable)Session["TempTable"];
            GridView1.DataSource = dt;
        }
    }

    protected void AddButton_Click(object sender, EventArgs e)
    {
        dt = (DataTable)Session["TempTable"]; // Fetching datatable from session

        DataRow dr = dt.NewRow(); // Adding new row to datatable
        dr[0] = "Jenny";
        dr[1] = "LastName";
        dr[2] = "Jenny@hotmail.com";
        dr[3] = "867-5309";
        dt.Rows.Add(dr);

        Session["TempTable"] = dt;   // update datatable in session
        GridView1.DataSource = dt;   // updated datatable is now new datasource
        GridView1.DataBind();        // calling databind on gridview
    }

问题

GridView 中是否有我没有设置的属性,或者我的代码有什么根本错误?对解决方案的任何帮助都会很棒。提前致谢。

解决方案

我对我的AddButton_Click 事件进行了 Bart De Meyer 的建议更改,并将我的GridViewAutoGenerateColumns 属性设置为true

【问题讨论】:

  • 我刚刚复制并粘贴了您的代码,它对我有用。您是否还有其他未发布的代码?
  • 不,可能是 GridView 设置。
  • 确实如此。 AutoGenerateColumns 设置为 false。

标签: c# asp.net session gridview datatable


【解决方案1】:

您的 Click 事件将在页面加载事件之后执行。

在您的点击事件中:

  • 从会话中获取数据表
  • 将新行添加到数据表中
  • 更新会话中的表格
  • 将更新后的数据表指定为gridview数据源
  • 在您的 gridview 上调用 DataBind

问题更新后。我试过了:

private DataTable dt;

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        dt= new DataTable();

        dt.Columns.Add("First", typeof(String));
        dt.Columns.Add("Last", typeof(String));
        dt.Columns.Add("Email", typeof(String));
        dt.Columns.Add("Phone", typeof(String));
        Session["TempTable"] = dt;
        grid.DataSource = dt;
    }
    else
    {
        dt = (DataTable)Session["TempTable"];
        grid.DataSource = dt;
    }
}

protected void btnAdd_Click(object sender, EventArgs e)
{
    dt = (DataTable)Session["TempTable"]; // Fetching datatable from session

    DataRow dr = dt.NewRow(); // Adding new row to datatable
    dr[0] = "Jenny";
    dr[1] = "LastName";
    dr[2] = "Jenny@hotmail.com";
    dr[3] = "867-5309";
    dt.Rows.Add(dr);

    Session["TempTable"] = dt;   // update datatable in session
    grid.DataSource = dt;   // updated datatable is now new datasource
    grid.DataBind();        // calling databind on gridview
}

应该工作:

备注: Gridview ID 参数 = 网格 按钮点击事件 = btnAdd_Click

【讨论】:

  • 我编辑了我的点击事件,这些编辑现在反映在我的问题中。
  • 感谢您的建议。有效!我只需要将 GridView 的 AutoGenerateColumns 属性设置为 true。
  • 你为什么把这个设置为接受的解决方案?是的,点击事件是在页面加载事件之后执行的,但这并不能回答问题。
  • 好吧,我的旧点击事件逻辑不正确。您现在在我的问题中看到的那个不是最初发布的那个。这是根据 Bart 的建议编辑的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 2017-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多