Hej Jag vet inte om detta löser ditt problem med i din update metod har du skrivit följande: Tack för tipset... Det finns andra kontroller som du kan använda. Nja, möjligtvis datalist då jag vill använda de inbyggda upDatemöjligheterna. Men förmodligen får jag väl samma problem med upDatemetoden iaf. Vilken kodrad ger dig InvalidCast? Följande rad ger felmeddelandet: <code>string Rubrik = ((TextBox)e.Item.Cells[0].Controls[0]).Text;</code> Testa att ändra Cells från 0 till 1. Fick tips om att använda FindControl istället . Då funkade det fintfint.Hur modifierar jag doUpdate-metoden så att den fungerar till min datagrid?
Jag har "anpassat" min datagrid en smula så att den visar två fält samtidigt i samma <ItemTemplate> respektive <EditItemTemplate> rad.
Men jag får felmeddelande när jag klickar på "Edit"-knappen:
"System.InvalidCastException: Specified cast is not valid."
Jag vet dock inte hur jag ska lösa detta (förutom att ändra datagriden).
Min doUpdatemetod:
<code>public void doUpdate(Object sender, DataGridCommandEventArgs e) {
string Rubrik = ((TextBox)e.Item.Cells[0].Controls[0]).Text;
string Text = ((TextBox)e.Item.Cells[1].Controls[1]).Text;
mygrid.EditItemIndex = -1;
DataSet ds = CreateDataSource();
DataRow row = ds.Tables[0].Rows[e.Item.ItemIndex];
row["rubrik"]=Rubrik;
row["huvudtext"]=Text;
ds.WriteXml(Server.MapPath("../../db/aktuellt.xml"));
mygrid.DataSource = CreateDataSource();
mygrid.DataBind();
}</code>
Min datagrid:
<code><form runat="server">
<asp:datagrid id="mygrid" runat="server" AutoGenerateColumns="false"
OnUpdateCommand="doUpdate"
---
--- >
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<b><asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "rubrik") %>' runat="server" /></b>
<br /><br />
<asp:Label Text='<%# ((string)DataBinder.Eval(Container.DataItem, "huvudtext")).Replace("\n", "<br/>") %>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id="Rubrik" Rows="1" Text='<%# DataBinder.Eval(Container.DataItem, "rubrik")%>' textMode="SingleLine" Columns="35" runat="server" />
<br /><br />
<asp:TextBox id="Huvudtext" Rows="15" Text='<%# DataBinder.Eval(Container.DataItem, "huvudtext")%>' textMode="multiLine" Columns="35" runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:EditCommandColumn CancelText="Ångra" EditText="Ändra" UpdateText="Uppdatera" ButtonType="PushButton" />
</Columns>
</asp:datagrid></code>
// MickeSv: Hur modifierar jag doUpdate-metoden så att den fungerar till min datagr
string Text = ((TextBox)e.Item.Cells[1].Controls[1]).Text;
Ändra det till:
string Text = ((TextBox)e.Item.Cells[0].Controls[1]).Text;
Det är i Cells 0 som du har både kontrollerna, för det är väl dom två som du vill hämta data ifrån?
/Fredrik NSv: Hur modifierar jag doUpdate-metoden så att den fungerar till min datagr
Du har rätt på bägge punkter. Det är cell 0 som ska uppdateras och det funkar inte ändå. Det kanske inte går att göra så som jag vill...
Om nån undrar varför jag vill ha det så här är det för att jag vill ha cellerna så här:
-------- ------------------
Rubrik | istället för | Rubrik | Text | Kanske nån annan lösning finns....
Text | -------------------
--------
// MickeSv: Hur modifierar jag doUpdate-metoden så att den fungerar till min datagr
Tex: DataRepeater eller DataList
/Fredrik NSv: Hur modifierar jag doUpdate-metoden så att den fungerar till min datagr
// MickeSv: Hur modifierar jag doUpdate-metoden så att den fungerar till min datagr
/Fredrik NSv: Hur modifierar jag doUpdate-metoden så att den fungerar till min datagr
Sen har jag väl skrivit fel på raden efter. Det är väl bara en "Controls" som används så det ska väl stå:
<code>string Rubrik = ((TextBox)e.Item.Cells[0].Controls[0]).Text;
string Text = ((TextBox)e.Item.Cells[0].Controls[0]).Text; </code> Inte Controls[1] som jag skrev i första inlägget....
/ MickeSv: Hur modifierar jag doUpdate-metoden så att den fungerar till min datagr
<code>
string Rubrik = ((TextBox)e.Item.Cells[1].Controls[0]).Text;
string Text = ((TextBox)e.Item.Cells[1].Controls[1]).Text;
</code>
Den cells räknar ev från 1 när du ska hämta dina kolumner du har skapat.
Om detta inte fungerar se så att Controls[0] verkligen är en TextBox. Kör en Quick Watch i debug på Cells[0].Controls och se vilka kontroller den innehåller.
/Fredrik NSv: Hur modifierar jag doUpdate-metoden så att den fungerar till min datagr
Alltså :
<code>string Rubrik = ((TextBox)e.Item.FindControl("Rubrik")).Text;
string Text = ((TextBox)e.Item.FindControl("Huvudtext")).Text;</code>
Tack för all hjälp
//Smyken