cokMedlem sedan dec. 2005664 inläggTja,
Jag undrar om någon har ett bra och enkelt exemepl på hur man kan binda en lista av objekt till en gridview. Använda commandfield för att när man klickar på raden ska alla cellerna blir redigerbara (t ex att textboxar visas).
Redigeringarna ska sedan sparas i listan. Hittar ingent bra exemepel (vilket inte borde vara några problem).
Tacksam för hilfe.
Mr noob
CatZMedlem sedan jan. 20022 440 inläggKommer inte ihåg hur det var i asp.net men i Windows Forms applications så ändras det i listan automatiskt om du ändrar på en rad i en DataGridView eftersom listan är databunden.
Annars har du ju eventen OnRowEdit osv i en GridView då du enkelt kan uppdatera din lista med nya värden om det inte fungerar på automatik.
Din lista borde ha samma index som din gridview eftersom båda använder 0-index
hopparnMedlem sedan nov. 20011 551 inläggett sätt...
jag använder mig oftast av detta sätt...
OnRowUpdating="RowUpdating" i gridview samt
rowupdating i codebehind typ såhär...
protected override void RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridView grid = sender as GridView;
if (grid != null)
{
// Get row
GridViewRow row = grid.Rows[e.RowIndex];
if (row != null)
{
// Get PK från DataKey
int alternativesID = (int) grid.DataKeys[e.RowIndex]["Id"];
// Get object
WebClientFacade facade = new WebClientFacade();
Alternatives c = facade.GetAlternativesById(alternativesID);
// Update with new values
c.Title = ((TextBox) row.FindControl("Title")).Text;
c.Correct = ((CheckBox) row.FindControl("Correct")).Checked;
try
{
// Save
facade.SaveAlternatives(c);
_messageBox.Invoke(MessageBox.Messages.AlternativesUpdated, MessageBox.MessageType.Info);
// Rebind
BindAlternativesGrid(QuestionID);
}
catch (Exception ex)
{
_messageBox.Invoke(ex);
}
}
}
// Execute standard tasks
base.RowUpdating(sender, e);
}
då använder jag som regel templateffields också, för jag vill inte vända buken upp på alla fält på raden utan bara de som ska editeras...
<asp:TemplateField HeaderText="Nummer">
<ItemTemplate>
<asp:Literal runat="server" Text='<%# Eval("Number") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Rätt svar">
<ItemTemplate>
<asp:CheckBox runat="server" ID="Correct" Checked='<%#Eval("correct") %>' Enabled="false" />
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox runat="server" ID="Correct" Checked='<%#Eval("correct") %>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Alternativ">
<ItemTemplate>
<asp:Literal runat="server" Text='<%# Eval("Title") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="Title" runat="server" Text='<%# Eval("Title") %>' />
</EditItemTemplate>
</asp:TemplateField>