Click to See Complete Forum and Search --> : datagrid and viewstate


mauidude
November 4th, 2004, 03:29 PM
hi all i'm trying to add rows to a datagrid dynamically by having a user fill out some information and then press an add button which adds the data from that form as a row in the datagrid my datagrid is as follows:

<asp:DataGrid AllowPaging="false" AutoGenerateColumns="true" ID="PetitionGrid" runat="server" EnableViewState="true">
<Headerstyle wrap="false" BackColor="#A4B2C2"></Headerstyle>
<Itemstyle ForeColor="#000066" Wrap="false"></Itemstyle>
</asp:DataGrid>

and my server side code looks like:
protected void Page_Load(object Src, EventArgs Args)
{
if ((ArrayList)ViewState["Petitions"] != null)
{
PetitionGrid.DataSource = GetDataSource();
PetitionGrid.DataBind();

foreach (DataGridColumn col in PetitionGrid.Columns)
{
col.ItemStyle.Wrap = false;
}

PetitionGrid.HeaderStyle.Wrap = false;
}
}

private ICollection GetDataSource()
{
DataTable dt = new DataTable();
DataRow dr;

dt.Columns.Add(new DataColumn("Request", typeof(string)));
dt.Columns.Add(new DataColumn("School", typeof(string)));
dt.Columns.Add(new DataColumn("Course Number", typeof(Int32)));
dt.Columns.Add(new DataColumn("Grade", typeof(string)));
dt.Columns.Add(new DataColumn("Units", typeof(string)));
dt.Columns.Add(new DataColumn("Reason", typeof(string)));

ArrayList list = (ArrayList)ViewState["Petitions"];

for (int i = 0; i < list.Count; i++)
{
dr = dt.NewRow();
ChangeEnrollmentPetition cep = (ChangeEnrollmentPetition)list[i];

dr[0] = cep.Request;
dr[1] = cep.School;
dr[2] = cep.CourseNumber;
dr[3] = cep.LetterGrade?"Letter Grade":"Pass/ No Pass";
dr[4] = (cep.Units == 0)?"NA":cep.Units.ToString();
dr[5] = cep.Reason;

dt.Rows.Add(dr);
}

DataView dv = new DataView(dt);
return dv;
}

private void AddPetitionClicked(object sender, EventArgs args)
{
if ((Button)sender != AddPetitionButton)
return;

ChangeEnrollmentPetition petition = new ChangeEnrollmentPetition();
petition.Request = ChangeEnrollmentPetition.RequestType.Add;
petition.School = "UCI";
petition.CourseNumber = 100;
petition.LetterGrade = true;
petition.Units = 4;
petition.Reason = "blah blah";

ArrayList petitions = (ArrayList)ViewState["Petitions"];

if (petitions == null)
{
petitions = new ArrayList();
}

petitions.Add(petition);
ViewState["Petitions"] = petitions;
}

the problem is that when i click the add button, it won't show up on the data grid until i press it again. in other words, each row being added is delayed by one button click, if that makes sense... i do have the viewstate enabled for the page also, and i've tried it with the session variable instead and it does the same exact thing.... any help would be very much appreciated!!!