webForumDet fria alternativet

Exempel på uppdatera rad i gridview

.NET

2 svar · 592 visningar · startad av cok

Medlem sedan dec. 2005664 inlägg
Frågan#1

Tja,

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

Medlem sedan jan. 20022 440 inlägg
#2

Kommer 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

Medlem sedan nov. 20011 551 inlägg
#3

ett 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>
256 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)