作成日: 2015/08/18 最終更新日: 2015/08/18
文書種別
制限事項
詳細
C1InputDateのDateプロパティにDBNull.Value値をデータバインドすると下記のSystem.InvalidCastExceptionが発生します。
◆エラーメッセージ(Visual Studioから実行した場合)
型 'System.InvalidCastException' の例外が App_Web_uhqbmhru.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした
追加情報:指定されたキャストは有効ではありません。
本現象は製品の仕様に基づく動作となります。
C1InputDate.DateプロパティはDateTimeのnull許容型であり、DateTime型の値かnull値のみを設定できます。また、DataSet/DataTableでは、データ型(DataColumn.DataTypeプロパティ)にnull許容型を指定することはできず、DateTime型の値かDBNull.Value値のみを格納できます。
このため、C1InputDate.DateプロパティにはDateTime型の値のみバインド可能であり、null値またはDBNull.Value値をバインドすることはできません。
◎サンプルコード(aspx)
◎サンプルコード(VB)
◎サンプルコード(C#)
【再現手順】
1.サンプルを実行します
結果:エラーメッセージが表示されます
◆エラーメッセージ(Visual Studioから実行した場合)
型 'System.InvalidCastException' の例外が App_Web_uhqbmhru.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした
追加情報:指定されたキャストは有効ではありません。
本現象は製品の仕様に基づく動作となります。
C1InputDate.DateプロパティはDateTimeのnull許容型であり、DateTime型の値かnull値のみを設定できます。また、DataSet/DataTableでは、データ型(DataColumn.DataTypeプロパティ)にnull許容型を指定することはできず、DateTime型の値かDBNull.Value値のみを格納できます。
このため、C1InputDate.DateプロパティにはDateTime型の値のみバインド可能であり、null値またはDBNull.Value値をバインドすることはできません。
◎サンプルコード(aspx)
<asp:ListView ID="ListView1" runat="server">
<ItemTemplate>
<wijmo:C1InputDate ID="C1InputDate1" runat="server" Date='<%# Bind("Date") %>'>
</wijmo:C1InputDate>
</ItemTemplate>
</asp:ListView>
<ItemTemplate>
<wijmo:C1InputDate ID="C1InputDate1" runat="server" Date='<%# Bind("Date") %>'>
</wijmo:C1InputDate>
</ItemTemplate>
</asp:ListView>
◎サンプルコード(VB)
Dim dt = New DataTable()
dt.Columns.Add("Date")
dt.Columns(0).DataType = GetType(DateTime)
dt.Rows.Add(DateTime.Today)
dt.Rows.Add(DBNull.Value)
ListView1.DataSource = dt
ListView1.DataBind()
dt.Columns.Add("Date")
dt.Columns(0).DataType = GetType(DateTime)
dt.Rows.Add(DateTime.Today)
dt.Rows.Add(DBNull.Value)
ListView1.DataSource = dt
ListView1.DataBind()
◎サンプルコード(C#)
var dt = new DataTable();
dt.Columns.Add("Date");
dt.Columns[0].DataType = typeof(DateTime);
dt.Rows.Add(DateTime.Today);
dt.Rows.Add(DBNull.Value);
ListView1.DataSource = dt;
ListView1.DataBind();
dt.Columns.Add("Date");
dt.Columns[0].DataType = typeof(DateTime);
dt.Rows.Add(DateTime.Today);
dt.Rows.Add(DBNull.Value);
ListView1.DataSource = dt;
ListView1.DataBind();
【再現手順】
1.サンプルを実行します
結果:エラーメッセージが表示されます
回避方法
null値またはDBNull.Value値を設定できるobject型のカスタムプロパティを追加して、設定された値をDateプロパティに変換することで、回避することができます。
◎サンプルコード(aspx)
◎サンプルコード(VB)
◎サンプルコード(C#)
◎サンプルコード(aspx)
<%@ Register TagPrefix="wij" Namespace="プロジェクト名" Assembly="プロジェクト名" %>
:
<asp:ListView ID="ListView1" runat="server">
<ItemTemplate>
<wij:C1CustomInputDate ID="C1InputDate1" runat="server" DataBindingDate='<%# Bind("Date") %>'></wij:C1CustomInputDate>
</ItemTemplate>
</asp:ListView>
:
<asp:ListView ID="ListView1" runat="server">
<ItemTemplate>
<wij:C1CustomInputDate ID="C1InputDate1" runat="server" DataBindingDate='<%# Bind("Date") %>'></wij:C1CustomInputDate>
</ItemTemplate>
</asp:ListView>
◎サンプルコード(VB)
Public Partial Class C1CustomInputDate
Inherits C1.Web.Wijmo.Controls.C1Input.C1InputDate
Public Property DataBindingDate() As Object
Get
Return Me.Date
End Get
Set
Dim dt = TryCast(value, System.Nullable(Of DateTime))
Me.Date = dt
End Set
End Property
Protected Overrides Sub OnPreRender(e As EventArgs)
MyBase.OnPreRender(e)
RegisterScript()
End Sub
Private Sub RegisterScript()
Me.Page.ClientScript.RegisterStartupScript(Me.[GetType](), Convert.ToString(Me.ID) & "_script", "<script>$.fn.c1custominputdate = $.fn.c1inputdate</script>")
End Sub
End Class
Inherits C1.Web.Wijmo.Controls.C1Input.C1InputDate
Public Property DataBindingDate() As Object
Get
Return Me.Date
End Get
Set
Dim dt = TryCast(value, System.Nullable(Of DateTime))
Me.Date = dt
End Set
End Property
Protected Overrides Sub OnPreRender(e As EventArgs)
MyBase.OnPreRender(e)
RegisterScript()
End Sub
Private Sub RegisterScript()
Me.Page.ClientScript.RegisterStartupScript(Me.[GetType](), Convert.ToString(Me.ID) & "_script", "<script>$.fn.c1custominputdate = $.fn.c1inputdate</script>")
End Sub
End Class
◎サンプルコード(C#)
public partial class C1CustomInputDate : C1.Web.Wijmo.Controls.C1Input.C1InputDate
{
public object DataBindingDate
{
get { return this.Date; }
set
{
var dt = value as DateTime?;
this.Date = dt;
}
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
RegisterScript();
}
private void RegisterScript()
{
this.Page.ClientScript.RegisterStartupScript(this.GetType(), this.ID + "_script", "<script>$.fn.c1custominputdate = $.fn.c1inputdate</script>");
}
}
{
public object DataBindingDate
{
get { return this.Date; }
set
{
var dt = value as DateTime?;
this.Date = dt;
}
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
RegisterScript();
}
private void RegisterScript()
{
this.Page.ClientScript.RegisterStartupScript(this.GetType(), this.ID + "_script", "<script>$.fn.c1custominputdate = $.fn.c1inputdate</script>");
}
}
旧文書番号
81430