RE: ObjectDataSource DateTime isuue with en-gb culture

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance



Hi Philip,

Your a geneous! Thanks, that works great!

I wish the MSDN documentation actually mentioned this!

Thanks again,

Anne.

"Phillip Williams" wrote:

> Hi Anne,
>
> If I build a web page that allows the user’s browser to determine the
> display of the date, yet my database operates on a server using the culture
> setting for en-us, then I would get the error that you got as in this demo:
> http://www.webswapp.com/CodeSamples/aspnet20/GridView_2c_error.aspx
>
> If I add an UpdateParameters section within my objectDataSource defintion to
> explicitly cast the edited values to their appropriate date type, I do not
> get that error as in this demo:
> http://www.webswapp.com/CodeSamples/aspnet20/GridView_2c.aspx
>
> --
> HTH,
> Phillip Williams
> http://www.societopia.net
> http://www.webswapp.com
>
>
> "Anne Catterick" wrote:
>
> > Hi,
> >
> > It's a simple private field with public accessors:
> >
> > private DateTime _CreateDate;
> >
> > public DateTime CreateDate
> > {
> > get { return _CreateDate; }
> > set { _CreateDate = value; }
> > }
> >
> > Any ideas?
> >
> > Thanks,
> >
> > Anne.
> > "Phillip Williams" wrote:
> >
> > > Hi Anne,
> > >
> > > How do you define the "CreateDate" within the
> > > "B3.Mailer.BusinessEntities.Campaign" class?
> > > --
> > > HTH,
> > > Phillip Williams
> > > http://www.societopia.net
> > > http://www.webswapp.com
> > >
> > >
> > > "Anne Catterick" wrote:
> > >
> > > > Hi,
> > > >
> > > > I have an british ASP.Net 2.0 application which is doing what (should) be
> > > > very simple. But I am having issues.
> > > >
> > > > On my page I have a GridView as follows (some tags excluded for easy reading):
> > > >
> > > > <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
> > > > DataSourceID="ObjectDataSource1" DataKeyNames="Id"
> > > > OnRowUpdated="GridView1_RowUpdated">
> > > > <Columns>
> > > > <asp:BoundField DataField="CreateDate" HeaderText="Create Date"
> > > > SortExpression="CreateDate"
> > > > DataFormatString="{0:d}" ApplyFormatInEditMode="True"
> > > > ReadOnly="True" HtmlEncode="False">
> > > > <HeaderStyle Wrap="False" />
> > > > </asp:BoundField>
> > > > <asp:CommandField ButtonType="Image"
> > > > CancelImageUrl="~/images/manager/false.gif"
> > > > EditImageUrl="~/images/manager/edit.gif"
> > > > ShowEditButton="True" UpdateImageUrl="~/images/manager/true.gif" />
> > > > </Columns>
> > > > </asp:GridView>
> > > >
> > > > This is bound to an ObjectDataSource defined as follows:
> > > >
> > > > <asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
> > > > SelectMethod="GetCampaigns"
> > > > TypeName="B3.Mailer.BusinessEntities.Campaign"
> > > > DataObjectTypeName="B3.Mailer.BusinessEntities.Campaign"
> > > > InsertMethod="Insert" UpdateMethod="Update">
> > > > <SelectParameters>
> > > > <asp:SessionParameter Name="clientId" SessionField="ClientId"
> > > > Type="Int32" />
> > > > </SelectParameters>
> > > > </asp:ObjectDataSource>
> > > >
> > > > The update method is defined as:
> > > >
> > > > public static void Update(Campaign campaign)
> > > > {
> > > > }
> > > >
> > > > However, when I edit a row in the GridView and press the update button I get
> > > > the following error:
> > > >
> > > > [InvalidOperationException: Cannot convert value of parameter 'CreateDate'
> > > > from 'System.String' to 'System.DateTime']
> > > > System.Web.UI.WebControls.ObjectDataSourceView.ConvertType(Object value,
> > > > Type type, String paramName) +485
> > > > System.Web.UI.WebControls.ObjectDataSourceView.BuildObjectValue(Object
> > > > value, Type destinationType, String paramName) +217
> > > > System.Web.UI.WebControls.ObjectDataSourceView.BuildDataObject(Type
> > > > dataObjectType, IDictionary inputParameters) +548
> > > > System.Web.UI.WebControls.ObjectDataSourceView.ExecuteUpdate(IDictionary
> > > > keys, IDictionary values, IDictionary oldValues) +1520
> > > > System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values,
> > > > IDictionary oldValues, DataSourceViewOperationCallback callback) +179
> > > > System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow row, Int32
> > > > rowIndex, Boolean causesValidation) +1137
> > > > System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean
> > > > causesValidation, String validationGroup) +835
> > > > System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs
> > > > e) +162
> > > > System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +56
> > > > System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source,
> > > > EventArgs e) +118
> > > > System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +56
> > > > System.Web.UI.WebControls.ImageButton.OnCommand(CommandEventArgs e) +106
> > > > System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String
> > > > eventArgument) +200
> > > >
> > > > System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +31
> > > > System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
> > > > sourceControl, String eventArgument) +32
> > > > System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +72
> > > > System.Web.UI.Page.ProcessRequestMain(Boolean
> > > > includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3840
> > > >
> > > > This appears to be caused by the date being in UK format (dd/mm/yyyy - which
> > > > is correct for this application) as dates which could also be in US format
> > > > (i.e. 12/12/2005) do not throw this error.
> > > >
> > > > Both my browser and development machine are set to en-gb but there is no
> > > > Culture attribute set on the @Page tags on the page.
> > > >
> > > > Is this a bug in the ObjectDataSource not conforming to globalization or am
> > > > I missing somthing?
> > > >
> > > > Any help you can give will be much appreciated. Thanks in advance for your
> > > > help.
> > > >
> > > > Regards,
> > > >
> > > > Anne.
> > > >
.


Quantcast