Hej Hehe det vore väl inte ett bra program om användaren inte får lov att ta bort sista posten... "Hehe det vore väl inte ett bra program om användaren inte får lov att ta bort sista posten..." Blir det någon skillnad om du bara binder datan när postback är false Sorry för mitt sena svar. Har varit i en datorfri miljö ett par dar (vilket kan vara nog så skönt ibland :) ).Vid delete krashar sista posten datagriden
Jag populerar en datagrid med data från en xml-fil och låter användaren lägga till och ta bort poster från denna. Nu har jag upptäckt att när användaren tar bort den sista posten i xml-filen kraschar sidan, vilket beror på att griden helt enkelt inte har någon data att visa.
Har försökt komma på någon smart lösning, bla genom att förhindra användaren att ta bort den sista posten genom att lägga till en tom post (tom nod) och genom att kolla "innehållet" i den tomma noden spärra delete-funktionen. Detta fungerar visserligen men det är inte en så snygg lösning då griden visar "ta bort"-knappen för den tomma posten ändå.
Försökte också med att gömma den sista posten (och dess "ta bort"-knapp) men lyckades inte.
Kanske någon annan på forumet har råkat ut för samma problem och har en lösning? Samma problem blir väl även om jag använder exempelvis en access-databas?Sv: Vid delete krashar sista posten datagriden
Hur ser koden ut där du populerar datagridden? Det måste vara något där som går fel när det inte finns några poster kvar...Sv:Vid delete krashar sista posten datagriden
:) Jo, det är ju lite dumt... fast den posten är alltid tom...
Här är lte kod...
public void Page_Load(Object sender, EventArgs e)
{
GridText.DataSource = CDSmyText();
GridText.DataBind();
}
private DataSet CDSmyText()
{
XmlDataDocument myText= new XmlDataDocument();
myText.DataSet.ReadXml(Server.MapPath("xmldb/mytext.xml"));
return myText.DataSet;
}
och så griden:
<asp:DataGrid id="GridText" OnDeleteCommand="doDeleteText" runat="server">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:Label id="foo" text='<%# DataBinder.Eval(Container.DataItem, "text") %>' runat="server" />
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:Button Commandname="Delete" Text="Ta bort" id="DeleteText" runat="server" />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
Som synes så hämtar datagriden posten "text", även om ingen node för den posten finns i xml-filen...
Sv: Vid delete krashar sista posten datagriden
<code>
if (!page.ispostback) {
GridText.DataSource = CDSmyText();
GridText.DataBind();
}
</code>
och sen binder datan igen när du kör din delete
<code>
public void doDeleteText() {
// radera
GridText.DataSource = CDSmyText();
GridText.DataBind();
}
</code>Sv:Vid delete krashar sista posten datagriden
Nåväl, nej, ovanstående gör ingen skillnad. Vilket också, så vitt jag förstår, är logiskt då datagriden inte har någon data att binda, varesig en postback har skett eller inte.... väl...? Eller är jag ute o cyklar?!
Felmeddelandet som jag får är för övrigt:
System.Web.HttpException: The IListSource does not contain any data sources.
Så här ser xml-filen ut före den sista posten raderas:<?xml version="1.0" standalone="yes"?>
<node1>
<node2>
<text>vinter.jpg</text>
</node2>
</node1>
och så här efter:<?xml version="1.0" standalone="yes"?>
<node1 />