如何解决列'Policy_No'不属于表?

时间:2016-08-30 10:00:57

标签: asp.net gridview buttonclick

我有一个简单的界面,有一个文本框,按钮和一个gridview。我想在单击按钮时在gridview中显示数字。但我得到一个ArgumentException,说“列'Policy_No'不属于表”。我该怎么做才能解决它。我在这里添加了以下代码。

按钮单击事件

protected void btnAdd_Click(object sender, EventArgs e)
{
    dt = new DataTable();
    dr = dt.NewRow();
    dr["Policy_No"] = txtPolicy.Text.Trim();
    dt.Rows.Add(dr);
    grdPolicy.DataSource = dt;
    grdPolicy.DataBind();
}

页面加载代码

protected void Page_Load(object sender, EventArgs e)
{
    dt = new DataTable();
    dt.Columns.Add(new DataColumn("Policy_No", typeof(string)));
    if (!IsPostBack)
    {
        loadCompetitionsNames();
    }
}

2 个答案:

答案 0 :(得分:2)

您正在new DataTable内创建btnAdd_Click column Policy_No protected void btnAdd_Click(object sender, EventArgs e) { //dt = new DataTable(); Remove this line dr = dt.NewRow(); dr["Policy_No"] = txtPolicy.Text.Trim(); dt.Rows.Add(dr); grdPolicy.DataSource = dt; grdPolicy.DataBind(); Session["PolicyTable"] = dt; } protected void Page_Load(object sender, EventArgs e) { if(Session["PolicyTable"] !=null) dt = Session["PolicyTable"] as DataTable; else dt = new DataTable(); if (!dt.Columns.Contains("Policy_No")) dt.Columns.Add(new DataColumn("Policy_No", typeof(string))); if (!IsPostBack) { loadCompetitionsNames(); } }

error event

答案 1 :(得分:2)

在Button Click Event

中添加列定义
public DataTable GetGridData()
{
    dt = new DataTable();
    dt.Columns.Add(new DataColumn("Policy_No", typeof(string)));
    dr = dt.NewRow();
    dr["Policy_No"] = txtPolicy.Text.Trim();
    dt.Rows.Add(dr);
    return dt;
} 

protected void btnAdd_Click(object sender, EventArgs e)
{
    grdPolicy.DataSource = GetGridData();
    grdPolicy.DataBind();
}

从页面加载中删除dt(DataTable)的初始化

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
         loadCompetitionsNames();
    }
}

您可以使用会话在页面回发中保留dt数据