【发布时间】:2016-01-03 15:44:33
【问题描述】:
我正在尝试向我的 GridView 添加新值,这些值稍后会传递给缓存和数据集以及底层 SQL 数据库。
这是我的代码,但我不知道在 "dataRow["ID"]=" 行上输入什么,如您所见。如果我只是给“ID”任何不存在的数字,其他一切都可以正常工作,并且其他值将添加到数据库中。
protected void insertStudent_Click(object sender, EventArgs e)
{
DataSet dataSet = (DataSet)Cache["DATASET"];
//DataRow dataRow = dataSet.Tables["Students"].Rows.Find(e.Keys["ID"]);
dataSet.Tables["Students"].PrimaryKey = new DataColumn[] { dataSet.Tables["Students"].Columns["ID"] };
DataRow dataRow = dataSet.Tables["Students"].NewRow();
dataRow["ID"] =
dataRow["FirstName"] = ((TextBox)GridView1.FooterRow.FindControl("txtFirstName")).Text;
dataRow["LastName"] = ((TextBox)GridView1.FooterRow.FindControl("txtLastName")).Text;
dataRow["Gender"] = ((DropDownList)GridView1.FooterRow.FindControl("DropDownListGender")).SelectedValue;
dataRow["Course"] = ((DropDownList)GridView1.FooterRow.FindControl("DropDownListCourse")).SelectedValue;
dataRow["Grade"] = ((DropDownList)GridView1.FooterRow.FindControl("DropDownListGrade")).SelectedValue;
Cache.Insert("DATASET", dataSet, null, DateTime.Now.AddHours(24), System.Web.Caching.Cache.NoSlidingExpiration);
dataSet.Tables["Students"].Rows.Add(dataRow);
GridView1.DataSource = (DataSet)Cache["DATASET"];
GridView1.DataBind();
}
【问题讨论】:
-
您不应键入任何内容。通常数据库有 ID 字段的自动增量设置,所以新条目有一个唯一的 id = last used id + 1
-
如果我不添加任何内容,我会收到“列 ID 不能为空”的异常。关于如何在每个新条目上使用 SQL 增加 ID 的任何想法?谢谢!
-
这正是我所说的,你应该设置数据库来为你处理这个问题。如果您使用的是 SQL Server,请查看 this thread 示例
-
对不起,我已经让它增加 1,就像他们在你发布的那个线程上所说的那样。仍然没有关于如何向 ID 列添加新 ID 并递增 1 的想法?
-
哦,好吧,那一定是DataTable扔的。对于 ID DatColumn,尝试设置
AutoIncrement = true或AllowDBNull = true。前者看起来更有希望
标签: sql asp.net gridview ado.net