C# 正在覆盖的数据表行
我正在尝试制作一个Sharepoint表单,在Visual C#中向GridView添加行。我只能写第一行,但是,当我单击AddRow时,它会覆盖我输入的最后一行。我尝试过使用sessions和Page.IsPostBack,但当我尝试运行Sharepoint时,它就死掉了。谢谢 命名空间VisualWebPartProject3.VisualWebPart1 { 公共部分类VisualWebPart1UserControl:UserControl { 数据表dtC# 正在覆盖的数据表行,c#,asp.net,sharepoint,C#,Asp.net,Sharepoint,我正在尝试制作一个Sharepoint表单,在Visual C#中向GridView添加行。我只能写第一行,但是,当我单击AddRow时,它会覆盖我输入的最后一行。我尝试过使用sessions和Page.IsPostBack,但当我尝试运行Sharepoint时,它就死掉了。谢谢 命名空间VisualWebPartProject3.VisualWebPart1 { 公共部分类VisualWebPart1UserControl:UserControl { 数据表dt private voi
private void Page_Load(object sender, EventArgs e)
{
// if (!Page.IsPostBack)
//{
dt = new DataTable();
CreateDataTableColumns(dt);
// }
}
private void CreateDataTableColumns(System.Data.DataTable dt)
{
dt.Columns.Add("Title");
dt.Columns.Add("Type");
}
protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
}
protected void AddRow_Click(object sender, EventArgs e)
{
string title = txtTitle.Text;
string selection = selectionList.Text;
DataRow dr = dt.NewRow();
//addrows
dr["Title"] = title;
dr["Type"] = selection;
dt.Rows.Add(dr);
int count = dt.Rows.Count;
GridView1.DataSource = dt;
GridView1.DataBind();
countTxt.Text = count.ToString();
}
}
}您必须跟踪会话或视图状态中的总行数。然后从视图状态加载项目并添加下一行。 看看下面的代码片段,看看它的实际效果
protected void AddRow_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
//check if the viewstate exists
if (ViewState["myTable"] != null)
{
//cast the viewstate back to a datatable
dt = ViewState["myTable"] as DataTable;
}
else
{
//add columns to tne new datatable
dt.Columns.Add("Title");
dt.Columns.Add("Type");
//add the table to the viewstate
ViewState["myTable"] = dt;
}
string title = "title " + dt.Rows.Count;
string selection = "selection " + dt.Rows.Count;
DataRow dr = dt.NewRow();
dr["Title"] = title;
dr["Type"] = selection;
dt.Rows.Add(dr);
GridView1.DataSource = dt;
GridView1.DataBind();
}
我不确定Sharepoint是否类似于web表单,但如果是,每次单击AddRow按钮时,它都会实例化页面(组件/用户控件)并触发页面的所有生命周期,它包括page_Load事件,因此每次单击按钮时,您都在创建一个新的DataTable,并且只会得到一行。您需要将DataTable存储在会话或类似的内容中。