mboost-dp1

asp.net C# gridview template


Gå til bund
Gravatar #1 - KC
20. feb. 2010 21:01
Jeg har et gridview som jeg fylder fra en DB. To af felterne har desuden en dropdownlist, den ene er låst med to værdier, men den vælger dynamisk den ene værdi, den anden dropdownlist udfyldes dynamisk.

Når jeg sorterer mit gridview forsvinder de dynamiske indstillinger, de kommer igen ved en genindlæsning af siden.

Hvordan kan jeg undgå at mine dynamiske indstillinger forsvinder?
Hvor skal jeg sætte ind for at foretage en ændring umiddelbart efter en sort er foretaget? Jeg har forsøgt eventhandlers _sorting og _sorted, men umiddelbart hjalp det ikke. Jeg mistænker at det er fordi mine tilføjelser til disse kommer ind inden den foretager en databind til gridview.

Jeg tror jeg skal have fat i min gridview efter den har foretaget databind. Jeg har dog forsøgt at kalde mine dynamiske ændringer ved page_load, men dette hjælper ikke, så jeg forestiller mig at den omgår pageload, måske med en updatepanel?


protected void Page_Load(object sender, EventArgs e)
{
// get project information from DB, so we can
reuse it later in the session
loadDBInfo();
// Select the relevant item in the dropdown
menu when this is not a postback.
if (!IsPostBack)
{ alignDropdown(); }
}



protected void loadDBInfo()
{
// Load info from DB
projectPrivacy = dbA.getProjectPrivacy();
activeProject = dbA.getActiveProject();
amntTeams = dbA.getAmntTeams(activeProject);

// Set labels on page
lblCurrentProject.Text = activeProject;
lblAmntTeams.Text = amntTeams;

// Set privacy labels and buttons
if (projectPrivacy == "True")
{
lblProjectPrivacy.Text = "Project is private";
btnPrivacy.Text = "Set public";
}
else
{
lblProjectPrivacy.Text = "Project is public";
btnPrivacy.Text = "Set private";
}
}



protected void alignDropdown()
{
// Select the proper item from the dropdown
in the gridview
DropDownList ddlList;
foreach (GridViewRow gvr in grdUsersInProject.Rows)
{
// Set the UserTitle Dropdown
ddlList = (DropDownList)grdUsersInProject.Rows[gvr.RowIndex].FindControl("ddlUserTitle");
//Set index to 0 if Member
Label tempLabel = (Label)gvr.Cells[2].FindControl("lblUserTitle");
if (tempLabel.Text == "Team Member")
{ddlList.SelectedIndex = 0;}
//Set index 1 if master
else
{ddlList.SelectedIndex = 1;}
// Set the TeamNumber dropdown
ddlList = (DropDownList)grdUsersInProject.Rows[gvr.RowIndex].FindControl("ddlSetTeam");
for (int i = 1; i <= int.Parse(amntTeams); i++)
{
ddlList.Items.Add(new ListItem("Team " + i, i.ToString()));
}
}
}



<asp:GridView ID="grdUsersInProject" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" DataKeyNames="ID" onsorted="grdUsersInProject_Sorted" onsorting="grdUsersInProject_Sorting">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" InsertVisible="False" ReadOnly="True" />
<asp:BoundField DataField="UserName" HeaderText="UserName" SortExpression="UserName" />
<asp:TemplateField HeaderText="UserTitle" SortExpression="UserTitle">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("UserTitle") %>'></asp:TextBox></EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblUserTitle" runat="server" Text='<%# Bind("UserTitle") %>'></asp:Label>
<asp:DropDownList ID="ddlUserTitle" runat="server" AutoPostBack="True"
onselectedindexchanged="ddlUserTitle_SelectedIndexChanged">
<asp:ListItem Value="Team Member">Team Member</asp:ListItem>
<asp:ListItem Value="Scrum Master">Scrum Master</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="TeamNumber" SortExpression="TeamNumber">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("TeamNumber") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblTeamNumber" runat="server" Text='<%# Bind("TeamNumber") %>'></asp:Label>
&nbsp;<asp:DropDownList ID="ddlSetTeam" runat="server"
onselectedindexchanged="ddlSetTeam_SelectedIndexChanged"
AutoPostBack="True">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:CheckBoxField DataField="IsConfirmed" HeaderText="IsConfirmed"
SortExpression="IsConfirmed" />
</Columns>
</asp:GridView>
Gravatar #2 - milandt
20. feb. 2010 21:03
Når du sorterer sker der et PostBack og alt der ikke ligger i ViewState går tabt. Enten skal du binde disse oplysninger igen eller beregne og sætte værdierne på ny.
Gravatar #3 - KC
20. feb. 2010 21:06
Jeg har sat den til at genindlæse hele lortet ved postback, (tror jeg) er det ikke det der sker i page_load?

forresten er siden oppe på goblogyourself.dk/Scrum

login med Newz // newz1

så kan du se problemet.

Ja den er grim, men jeg tager pynt når jeg har fået det til at virke.
Gravatar #4 - KC
20. feb. 2010 22:54
ser lige at jeg ikke genindlæser den i page_load ved postback, men jeg prøvede at genindlæse ved postback og det hjælper ikke.

Jeg er efterhånden ret sikker på at det er fordi jeg skal køre min alignDropdown(), som indsætter det dynamiske indhold, efter jeg har sorteret, men jeg kan ikke finde ud af hvordan jeg kan køre det efter sort.
Gravatar #5 - KC
21. feb. 2010 08:06
linket til siden der er problemet er nu link, men jeg har fjernet sorting indtil videre.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login