Tjena, hej, Jooahl, Grabbar, Har du testat att skala kalendern i icke edittemplate? Det blir tyvärr ingen skillnad med vilken typ av template jag använder. Snarare så är jag som du nyfiken på om DataBinder.Eval(Container, "DataItem.datum") på något av mig outforskat sätt själv anpassar sig?? Jag menar utan editläget så verkar det vara en sträng medan den i editläget är något annat? Jag har ändrat min lösning på följande vis, så här långt, att jag i editfunktionen på en grid läser in datumet innan jag sätter editläge. Tänkte bara tala om hur det gått.Cast problem
Jag undrar varför jag i ett läge kan sätta ett värde i en TextBox på detta sätt:
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.datum") %>'></asp:Label>
Då jag sedan inte kan sätta (pga class cast exception):
<asp:Calendar runat="server" SelectedDate='<%# DataBinder.Eval(Container, "DataItem.datum") %>'></asp:Calendar>
Men det som förbryllar mig är att följande går utmärkt:
<code>
<asp:Calendar runat="server" SelectedDate='2004-07-23'></asp:Calendar>
</code>
Borde inte det sista även ge class cast exception eftersom jag tydligt plockar ut en sträng om vi ser till det översta exemplet som inte skriker.
Jag kanske inte är riktigt vaken men kan någon förklara detta för mig, please.
/Jocke
Sv: Cast problem
Vad exakt för du för exception?
Det böre gå att binda så som du gör då både lables och kalenderns attribute nyttjar Bindable attributet satt till true och pekar åt båda hållen.
mvh JohanSv: Cast problem
Du har lite kostigt syntax till att börja med, du har placerat <b>DataItem</b> lite tokigt. Prova att använda dig av följande kod
<asp:Calendar runat="server" SelectedDate='<%# DataBinder.Eval(Container.DataItem, "datum") %>' VisibleDate='<%# DataBinder.Eval(Container.DataItem, "datum") %>'></asp:Calendar>
Hoppas det löser sig!
Sv: Cast problem
Det är VS.Net 2003 som genererat koden åt mig när jag valt alternativet "Gör om kolumn till template".
Testade dock att ändra om syntaxen på det speciella stället som du sa utan skillnad så jag antar att vi får söka andra faktorer.
Och angående felets art:
Specified cast is not valid.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidCastException: Specified cast is not valid.
Source Error:
Line 33:
Line 34: <EditItemTemplate>
Line 35: <asp:Calendar runat="server" SelectedDate='<%# DataBinder.Eval(Container, "DataItem.datum") %>'></asp:Calendar>
Line 36: </EditItemTemplate>
Line 37: </asp:TemplateColumn>
Source File: c:\inetpub\wwwroot\joacim\admin_dagbok.aspx Line: 35
Stack Trace:
[InvalidCastException: Specified cast is not valid.]
ASP.admin_dagbok_aspx.__DataBind__control12(Object sender, EventArgs e) in c:\inetpub\wwwroot\joacim\admin_dagbok.aspx:35
System.Web.UI.Control.OnDataBinding(EventArgs e)
System.Web.UI.Control.DataBind()
System.Web.UI.Control.DataBind()
System.Web.UI.Control.DataBind()
System.Web.UI.WebControls.DataGrid.CreateItem(Int32 itemIndex, Int32 dataSourceIndex, ListItemType itemType, Boolean dataBind, Object dataItem, DataGridColumn[] columns, TableRowCollection rows, PagedDataSource pagedDataSource)
System.Web.UI.WebControls.DataGrid.CreateControlHierarchy(Boolean useDataSource)
System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e)
System.Web.UI.WebControls.BaseDataList.DataBind()
joacim.admin_dagbok.BindDiaryData() in c:\inetpub\wwwroot\joacim\admin_dagbok.aspx.cs:81
joacim.admin_dagbok.editSportgren(Object source, DataGridCommandEventArgs e) in c:\inetpub\wwwroot\joacim\admin_dagbok.aspx.cs:115
System.Web.UI.WebControls.DataGrid.OnEditCommand(DataGridCommandEventArgs e)
System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs e)
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, EventArgs e)
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e)
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain()
Samt ett förtydligande av aspx sidans kod:
<asp:TemplateColumn HeaderText="Datum">
<ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.datum") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Calendar runat="server" SelectedDate='<%# DataBinder.Eval(Container, "DataItem.datum") %>'></asp:Calendar>
</EditItemTemplate>
</asp:TemplateColumn>
Felet uppstår då jag trycker Edit ...!!!!
Skrik till om jag missat att dela med mig något ytterligare
mvh
Jocke
Sv: Cast problem
DataItem.datum <- vad är det för typ?
Mvh JohanSv: Cast problem
Datat kommer från ett dataset vilket är laddat från en xml-fil samt saknar schema. Så jag anser att den tolkar det som en sträng då jag inte angett annat.
Testat med en CheckBox med samma resultat ... Alltså så måste det handla om att DataBinder.Eval(Container, "DataItem.datum") själv anpassar sig till Fel typ? ... Allt på aspx sidan är ju text samt att datakällan ej är typad. Ide?
Det är möjligt att jag försöker komma undan enkelt här..
Men i övrigt går det utmärkt med asp:Image, asp:Label, asp:TextBox !?!
hmm
JockeSv: Cast problem
Konverterar till DateTime.
Efter detta så Försöker jag sätta SelectedDate i kalendern men här får jag ett nytt problem:
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 136: Calendar cal;
Line 137: cal = (Calendar) e.Item.FindControl("Calendar1");
Line 138: cal.SelectedDate = date;
Line 139: cal.DataBind();
Line 140:
Source File: c:\inetpub\wwwroot\joacim\admin_dagbok.aspx.cs Line: 138
I övrigt så kan jag i editläget uppdatera gridden med kalenderkontrollen. Så nu är problemet krympt till att sätta datumet i denna när jag öppnar editläget. Jag har alltså skippat koden i aspx-sidan och kör enbart code-behind för att hantera kalendern.
/Jocke
Sv: Cast problem
Löste det på det första sättet efter att jag fått klarhet i att Kalenderns SelectedDate kräver DateTime typen om jag skall sätta denna med:
SelectedDate='<%# SetCalendar(DataBinder.Eval(Container, "DataItem.datum")) %>'
Medan den kräver string när jag sätter detta utan DataBinder.Eval(Container, "DataItem.datum")) såsom SelectedDate="2004-04-26" ...
Ja ja ... Eval och Late binding ... grrr
Nu blev det denna workaround till slut:
// aspx
....SelectedDate='<%# SetCalendar(DataBinder.Eval(Container, "DataItem.datum")) %>'></asp:Calendar>
// cs
protected DateTime SetCalendar(object datum) {
string[] arrDatumStr = datum.ToString().Split("-".ToCharArray());
return new DateTime(Convert.ToInt32(arrDatumStr[0]),
Convert.ToInt32(arrDatumStr[1]),
Convert.ToInt32(arrDatumStr[2]));
}
ha de
/Jocke