C# 正在覆盖的数据表行

C# 正在覆盖的数据表行,c#,asp.net,sharepoint,C#,Asp.net,Sharepoint,我正在尝试制作一个Sharepoint表单,在Visual C#中向GridView添加行。我只能写第一行,但是,当我单击AddRow时,它会覆盖我输入的最后一行。我尝试过使用sessions和Page.IsPostBack,但当我尝试运行Sharepoint时,它就死掉了。谢谢 命名空间VisualWebPartProject3.VisualWebPart1 { 公共部分类VisualWebPart1UserControl:UserControl { 数据表dt private voi

我正在尝试制作一个Sharepoint表单,在Visual C#中向GridView添加行。我只能写第一行,但是,当我单击AddRow时,它会覆盖我输入的最后一行。我尝试过使用sessions和Page.IsPostBack,但当我尝试运行Sharepoint时,它就死掉了。谢谢

命名空间VisualWebPartProject3.VisualWebPart1 { 公共部分类VisualWebPart1UserControl:UserControl { 数据表dt

    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存储在会话或类似的内容中。