将gridview传递给另一个方法时,gridview数据为null

问题描述 投票:0回答:1

我在以下事件中绑定gridview:(subjectdropdown_SelectedIndexChanged)我将以下事件中的gridview作为参数发送到另一个方法:Button1_click事件。

protected void subjectdropdown_SelectedIndexChanged(object sender, EventArgs e)
{
         DataTable getmarkfdb = inter.getmarksfromdatabaseothers(comp);
         if (getmarkfdb.Rows.Count > 0)
         {
                TemplateField lable1 = new TemplateField();
                lable1.ShowHeader = true;
                lable1.HeaderText = "AdmissionNumber";
                lable1.ItemTemplate = new gridviewtemplate(DataControlRowType.DataRow, "AdmissionNumber", "AdmissionNumber", "Label");
                studmarkgrid.Columns.Add(lable1);

                TemplateField label2 = new TemplateField();
                label2.ShowHeader = true;
                label2.HeaderText = "RollNumber";
                label2.ItemTemplate = new gridviewtemplate(DataControlRowType.DataRow, "RollNumber", "RollNumber", "Label");
                studmarkgrid.Columns.Add(label2);

                TemplateField label3 = new TemplateField();
                label3.ShowHeader = true;
                label3.HeaderText = "Name";
                label3.ItemTemplate = new gridviewtemplate(DataControlRowType.DataRow, "Name", "Name", "Label");
                studmarkgrid.Columns.Add(label3);

                TemplateField extmep = new TemplateField();
                extmep.ShowHeader = true;
                extmep.HeaderText = "ExternalMark";
                extmep.ItemTemplate = new gridviewtemplate(DataControlRowType.DataRow, "ExternalMark", "ExternalMark", "TextBox");

                studmarkgrid.Columns.Add(extmep);

                studmarkgrid.DataSource = getmarkfdb;
                studmarkgrid.DataBind();


       }
}

在gridview的TextBoxTemplate列中,我填写了Mark for student,在下面的事件中,我将gridview发送到insertstumark方法,用于从gridview读取数据并保存到数据库中。但是在insertstumark方法中,gridview行数据为null。

 protected void Button1_Click(object sender, EventArgs e)
 {
            comp.ACADAMICYEAR = acyeardropdown.SelectedItem.Text;
            comp.MEDIUM = mediumdropdown.SelectedItem.Text;
            string clas = classdropdown.SelectedItem.Text;
            string[] cs = clas.Split('-');
            comp.CLASSNAME = cs[0].ToString();
            comp.SECTIONNAME =Convert.ToChar(cs[1].Trim().ToString());
            comp.EXAMNAMES = examnamedropdown.SelectedItem.Text;
            comp.SUBJECTID = subjectdropdown.SelectedValue.ToString();
          //  studmarkgrid.DataBind();
           // System.Web.UI.WebControls.GridView grid = studmarkgrid;
           // System.Web.UI.WebControls.GridView grid = ViewState["stdmarkgrid"] as System.Web.UI.WebControls.GridView;
            DataTable studtable = null;
           // System.Web.UI.WebControls.GridView grid = (System.Web.UI.WebControls.GridView)ViewState["stdmarkgrid"];
            bool studm = inter.inserstumark(comp,stumarkgrid);
  }

问题是什么。我试图将gridview存储在viewstate中。但在下面的行中它通过错误。如何解决这个问题呢?

System.Web.UI.WebControls.GridView grid = ViewState["stdmarkgrid"] as System.Web.UI.WebControls.GridView;
asp.net gridview
1个回答
0
投票

很多时候,如果在页面生命周期中数据绑定到GridView太晚,则会渲染GridView,并且数据会被遗忘,因此在下一个PostBack中,您将无法访问GridView的底层数据源。

这看起来像是在这里发生的事情。只需将getmarksfromdatabaseothers的结果保存到ViewState,以便您可以根据需要再次访问它。

© www.soinside.com 2019 - 2024. All rights reserved.