作成日: 2015/10/19 最終更新日: 2015/10/19
文書種別
使用方法
詳細
DataSourceのDataProviderプロパティにExternalObjectを設定する場合や、C1Reportデザイナの接続のデータプロバイダに「外部アセンブリ内のオブジェクトへ接続」を設定する場合等では、ConnectionString(接続文字列)にIC1ReportExternalRecordsetインタフェースを実装するオブジェクトを作成し、そのオブジェクトを含むアセンブリを設定する必要があります。
IC1ReportExternalRecordsetインタフェースを実装するオブジェクトの実装例を以下に示します。
◎サンプルコード(Visual Basic)
◇ExtRecordset.vb
◇ExtRecordsetXaml.xaml.vb
◎サンプルコード(C#)
◇ExtRecordset.cs
◇ExtRecordsetXaml.xaml.cs
◎サンプルコード(XAML)
◇ExtRecordsetXaml.xaml
【C1Reportデザイナでの使用について】
C1Reportデザイナで「外部アセンブリ内のオブジェクトへ接続」を選択し、上記サンプルで生成されたアセンブリを設定する場合、サンプルプロジェクトの参照設定の「C1.WPF.C1Report.4.dll」を削除し、「C1.C1Report.4.dll」を追加したうえで、アセンブリを生成する必要があります。これは、C1ReportデザイナがWinForms版向けのアプリケーションとして作成されており、それを各エディションで使用しているためとなります。
また、アプリケーションにWinForms版のライセンスを組み込むため、サンプルプロジェクトのlicenses.licxファイルに以下の一行を記載する必要があります。
◇licenses.licx
IC1ReportExternalRecordsetインタフェースを実装するオブジェクトの実装例を以下に示します。
◎サンプルコード(Visual Basic)
◇ExtRecordset.vb
Public Class ExtRecordset
Implements IC1ReportExternalRecordset
Private _recordset As Recordset
Public Sub New()
_recordset = New Recordset()
End Sub
Public Property RecCount() As Integer
Get
Return _recordset.RecCount
End Get
Set(value As Integer)
_recordset.RecCount = value
End Set
End Property
Public ReadOnly Property Caption As String Implements IC1ReportExternalRecordset.Caption
Get
Return "External recordset sample"
End Get
End Property
Public Sub EditParams() Implements IC1ReportExternalRecordset.EditParams
Dim f As New ExtRecordsetXaml()
f.Edit(Me)
End Sub
Public Function GetRecordset() As IC1ReportRecordset Implements IC1ReportExternalRecordset.GetRecordset
Return _recordset
End Function
Public Property Params As String Implements IC1ReportExternalRecordset.Params
Get
Return _recordset.RecCount.ToString()
End Get
Set(value As String)
Dim count As Integer
If (Integer.TryParse(value, count)) Then
_recordset.RecCount = count
End If
End Set
End Property
End Class
Public Class Recordset
Implements IC1ReportRecordset
Private _recNo As Integer
Private _items As List(Of RecordsetItem) = New List(Of RecordsetItem)()
Public Sub New()
RecCount = 60
End Sub
Public Property RecCount() As Integer
Get
Return _items.Count
End Get
Set(value As Integer)
If _items.Count = value Then
Return
End If
_items.Clear()
For i As Integer = 1 To value
Dim item As RecordsetItem = New RecordsetItem()
item.ID = i
item.Caption = String.Format("Caption {0}", i)
_items.Add(item)
Next
End Set
End Property
Public Sub ApplyFilter(filter As String) Implements IC1ReportRecordset.ApplyFilter
End Sub
Public Sub ApplySort(sort As String) Implements IC1ReportRecordset.ApplySort
End Sub
Public Function BOF() As Boolean Implements IC1ReportRecordset.BOF
Return _recNo < 0
End Function
Public Function EOF() As Boolean Implements IC1ReportRecordset.EOF
Return _recNo >= _items.Count
End Function
Public Function GetBookmark() As Integer Implements IC1ReportRecordset.GetBookmark
Return _recNo
End Function
Public Function GetFieldNames() As String() Implements IC1ReportRecordset.GetFieldNames
Return New String() {"ID", "Caption"}
End Function
Public Function GetFieldTypes() As Type() Implements IC1ReportRecordset.GetFieldTypes
Return New Type() {GetType(Integer), GetType(String)}
End Function
Public Function GetFieldValue(fieldIndex As Integer) As Object Implements IC1ReportRecordset.GetFieldValue
Select Case fieldIndex
Case 0 : Return _items(_recNo).ID
Case 1 : Return _items(_recNo).Caption
Case Else : Return Nothing
End Select
End Function
Public Sub MoveFirst() Implements IC1ReportRecordset.MoveFirst
_recNo = 0
End Sub
Public Sub MoveLast() Implements IC1ReportRecordset.MoveLast
_recNo = _items.Count - 1
End Sub
Public Sub MoveNext() Implements IC1ReportRecordset.MoveNext
_recNo = _recNo + 1
End Sub
Public Sub MovePrevious() Implements IC1ReportRecordset.MovePrevious
_recNo = _recNo - 1
End Sub
Public Sub SetBookmark(bkmk As Integer) Implements IC1ReportRecordset.SetBookmark
_recNo = bkmk
End Sub
End Class
Public Class RecordsetItem
Public _id As Integer
Public Property ID() As Integer
Get
Return _id
End Get
Set(value As Integer)
_id = value
End Set
End Property
Public _caption As String
Public Property Caption() As String
Get
Return _caption
End Get
Set(value As String)
_caption = value
End Set
End Property
End Class
Implements IC1ReportExternalRecordset
Private _recordset As Recordset
Public Sub New()
_recordset = New Recordset()
End Sub
Public Property RecCount() As Integer
Get
Return _recordset.RecCount
End Get
Set(value As Integer)
_recordset.RecCount = value
End Set
End Property
Public ReadOnly Property Caption As String Implements IC1ReportExternalRecordset.Caption
Get
Return "External recordset sample"
End Get
End Property
Public Sub EditParams() Implements IC1ReportExternalRecordset.EditParams
Dim f As New ExtRecordsetXaml()
f.Edit(Me)
End Sub
Public Function GetRecordset() As IC1ReportRecordset Implements IC1ReportExternalRecordset.GetRecordset
Return _recordset
End Function
Public Property Params As String Implements IC1ReportExternalRecordset.Params
Get
Return _recordset.RecCount.ToString()
End Get
Set(value As String)
Dim count As Integer
If (Integer.TryParse(value, count)) Then
_recordset.RecCount = count
End If
End Set
End Property
End Class
Public Class Recordset
Implements IC1ReportRecordset
Private _recNo As Integer
Private _items As List(Of RecordsetItem) = New List(Of RecordsetItem)()
Public Sub New()
RecCount = 60
End Sub
Public Property RecCount() As Integer
Get
Return _items.Count
End Get
Set(value As Integer)
If _items.Count = value Then
Return
End If
_items.Clear()
For i As Integer = 1 To value
Dim item As RecordsetItem = New RecordsetItem()
item.ID = i
item.Caption = String.Format("Caption {0}", i)
_items.Add(item)
Next
End Set
End Property
Public Sub ApplyFilter(filter As String) Implements IC1ReportRecordset.ApplyFilter
End Sub
Public Sub ApplySort(sort As String) Implements IC1ReportRecordset.ApplySort
End Sub
Public Function BOF() As Boolean Implements IC1ReportRecordset.BOF
Return _recNo < 0
End Function
Public Function EOF() As Boolean Implements IC1ReportRecordset.EOF
Return _recNo >= _items.Count
End Function
Public Function GetBookmark() As Integer Implements IC1ReportRecordset.GetBookmark
Return _recNo
End Function
Public Function GetFieldNames() As String() Implements IC1ReportRecordset.GetFieldNames
Return New String() {"ID", "Caption"}
End Function
Public Function GetFieldTypes() As Type() Implements IC1ReportRecordset.GetFieldTypes
Return New Type() {GetType(Integer), GetType(String)}
End Function
Public Function GetFieldValue(fieldIndex As Integer) As Object Implements IC1ReportRecordset.GetFieldValue
Select Case fieldIndex
Case 0 : Return _items(_recNo).ID
Case 1 : Return _items(_recNo).Caption
Case Else : Return Nothing
End Select
End Function
Public Sub MoveFirst() Implements IC1ReportRecordset.MoveFirst
_recNo = 0
End Sub
Public Sub MoveLast() Implements IC1ReportRecordset.MoveLast
_recNo = _items.Count - 1
End Sub
Public Sub MoveNext() Implements IC1ReportRecordset.MoveNext
_recNo = _recNo + 1
End Sub
Public Sub MovePrevious() Implements IC1ReportRecordset.MovePrevious
_recNo = _recNo - 1
End Sub
Public Sub SetBookmark(bkmk As Integer) Implements IC1ReportRecordset.SetBookmark
_recNo = bkmk
End Sub
End Class
Public Class RecordsetItem
Public _id As Integer
Public Property ID() As Integer
Get
Return _id
End Get
Set(value As Integer)
_id = value
End Set
End Property
Public _caption As String
Public Property Caption() As String
Get
Return _caption
End Get
Set(value As String)
_caption = value
End Set
End Property
End Class
◇ExtRecordsetXaml.xaml.vb
Public Class ExtRecordsetXaml
Inherits Window
Public Sub New()
' この呼び出しはデザイナーで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
End Sub
Public Sub Edit(recordset As ExtRecordset)
tbRecCount.Text = recordset.RecCount.ToString()
If ShowDialog() = True Then
recordset.RecCount = Integer.Parse(tbRecCount.Text)
End If
End Sub
Private Sub button1_Click(sender As Object, e As RoutedEventArgs)
DialogResult = True
End Sub
End Class
Inherits Window
Public Sub New()
' この呼び出しはデザイナーで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
End Sub
Public Sub Edit(recordset As ExtRecordset)
tbRecCount.Text = recordset.RecCount.ToString()
If ShowDialog() = True Then
recordset.RecCount = Integer.Parse(tbRecCount.Text)
End If
End Sub
Private Sub button1_Click(sender As Object, e As RoutedEventArgs)
DialogResult = True
End Sub
End Class
◎サンプルコード(C#)
◇ExtRecordset.cs
public class ExtRecordset : IC1ReportExternalRecordset
{
private Recordset _recordset;
public ExtRecordset()
{
_recordset = new Recordset();
}
public int RecCount
{
get { return _recordset.RecCount; }
set { _recordset.RecCount = value; }
}
public string Caption
{
get { return "External recordset sample"; }
}
public void EditParams()
{
ExtRecordsetXaml f = new ExtRecordsetXaml();
f.Edit(this);
}
public IC1ReportRecordset GetRecordset()
{
return _recordset;
}
public string Params
{
get
{
return _recordset.RecCount.ToString();
}
set
{
int count;
if (int.TryParse(value, out count))
_recordset.RecCount = count;
}
}
}
public class Recordset : IC1ReportRecordset
{
private int _recNo;
private List _items = new List();
public Recordset()
{
RecCount = 60;
}
public int RecCount
{
get { return _items.Count; }
set
{
if (_items.Count == value)
return;
_items.Clear();
for (int i = 1; i <= value; i++)
{
RecordsetItem item = new RecordsetItem();
item.ID = i;
item.Caption = string.Format("Caption {0}", i);
_items.Add(item);
}
}
}
public void ApplyFilter(string filter)
{
}
public void ApplySort(string sort)
{
}
public bool BOF()
{
return _recNo < 0;
}
public bool EOF()
{
return _recNo >= _items.Count;
}
public int GetBookmark()
{
return _recNo;
}
public string[] GetFieldNames()
{
return new string[] { "ID", "Caption" };
}
public Type[] GetFieldTypes()
{
return new Type[] { typeof(int), typeof(string) };
}
public object GetFieldValue(int fieldIndex)
{
switch (fieldIndex)
{
case 0: return _items[_recNo].ID;
case 1: return _items[_recNo].Caption;
default: return null;
}
}
public void MoveFirst()
{
_recNo = 0;
}
public void MoveLast()
{
_recNo = _items.Count - 1;
}
public void MoveNext()
{
_recNo++;
}
public void MovePrevious()
{
_recNo--;
}
public void SetBookmark(int bkmk)
{
_recNo = bkmk;
}
}
public class RecordsetItem
{
public int ID { get; set; }
public string Caption { get; set; }
}
{
private Recordset _recordset;
public ExtRecordset()
{
_recordset = new Recordset();
}
public int RecCount
{
get { return _recordset.RecCount; }
set { _recordset.RecCount = value; }
}
public string Caption
{
get { return "External recordset sample"; }
}
public void EditParams()
{
ExtRecordsetXaml f = new ExtRecordsetXaml();
f.Edit(this);
}
public IC1ReportRecordset GetRecordset()
{
return _recordset;
}
public string Params
{
get
{
return _recordset.RecCount.ToString();
}
set
{
int count;
if (int.TryParse(value, out count))
_recordset.RecCount = count;
}
}
}
public class Recordset : IC1ReportRecordset
{
private int _recNo;
private List
public Recordset()
{
RecCount = 60;
}
public int RecCount
{
get { return _items.Count; }
set
{
if (_items.Count == value)
return;
_items.Clear();
for (int i = 1; i <= value; i++)
{
RecordsetItem item = new RecordsetItem();
item.ID = i;
item.Caption = string.Format("Caption {0}", i);
_items.Add(item);
}
}
}
public void ApplyFilter(string filter)
{
}
public void ApplySort(string sort)
{
}
public bool BOF()
{
return _recNo < 0;
}
public bool EOF()
{
return _recNo >= _items.Count;
}
public int GetBookmark()
{
return _recNo;
}
public string[] GetFieldNames()
{
return new string[] { "ID", "Caption" };
}
public Type[] GetFieldTypes()
{
return new Type[] { typeof(int), typeof(string) };
}
public object GetFieldValue(int fieldIndex)
{
switch (fieldIndex)
{
case 0: return _items[_recNo].ID;
case 1: return _items[_recNo].Caption;
default: return null;
}
}
public void MoveFirst()
{
_recNo = 0;
}
public void MoveLast()
{
_recNo = _items.Count - 1;
}
public void MoveNext()
{
_recNo++;
}
public void MovePrevious()
{
_recNo--;
}
public void SetBookmark(int bkmk)
{
_recNo = bkmk;
}
}
public class RecordsetItem
{
public int ID { get; set; }
public string Caption { get; set; }
}
◇ExtRecordsetXaml.xaml.cs
public partial class ExtRecordsetXaml : Window
{
public ExtRecordsetXaml()
{
InitializeComponent();
}
public void Edit(ExtRecordset recordset)
{
tbRecCount.Text = recordset.RecCount.ToString();
if (ShowDialog() == true)
recordset.RecCount = int.Parse(tbRecCount.Text);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
}
}
{
public ExtRecordsetXaml()
{
InitializeComponent();
}
public void Edit(ExtRecordset recordset)
{
tbRecCount.Text = recordset.RecCount.ToString();
if (ShowDialog() == true)
recordset.RecCount = int.Parse(tbRecCount.Text);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
}
}
◎サンプルコード(XAML)
◇ExtRecordsetXaml.xaml
<Window x:Class="IC1ReportExternalRecordsetCS.ExtRecordsetXaml"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ExtRecordset" Height="200" Width="400">
<Grid>
<Label Content="Record count:" Margin="32,33,241.6,114.4" Height="23" Width="120"/>
<TextBox Name="tbRecCount" Margin="139,33,134.6,114.4" Height="23" Width="120"/>
<Button Content="OK" Margin="129,99,164.6,44.4" Height="27" Width="100" IsDefault="True" Click="button1_Click"/>
<Button Content="Cancel" Margin="260,99,33.6,44.4" Height="27" Width="100" IsCancel="True"/>
</Grid>
</Window>
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ExtRecordset" Height="200" Width="400">
<Grid>
<Label Content="Record count:" Margin="32,33,241.6,114.4" Height="23" Width="120"/>
<TextBox Name="tbRecCount" Margin="139,33,134.6,114.4" Height="23" Width="120"/>
<Button Content="OK" Margin="129,99,164.6,44.4" Height="27" Width="100" IsDefault="True" Click="button1_Click"/>
<Button Content="Cancel" Margin="260,99,33.6,44.4" Height="27" Width="100" IsCancel="True"/>
</Grid>
</Window>
【C1Reportデザイナでの使用について】
C1Reportデザイナで「外部アセンブリ内のオブジェクトへ接続」を選択し、上記サンプルで生成されたアセンブリを設定する場合、サンプルプロジェクトの参照設定の「C1.WPF.C1Report.4.dll」を削除し、「C1.C1Report.4.dll」を追加したうえで、アセンブリを生成する必要があります。これは、C1ReportデザイナがWinForms版向けのアプリケーションとして作成されており、それを各エディションで使用しているためとなります。
また、アプリケーションにWinForms版のライセンスを組み込むため、サンプルプロジェクトのlicenses.licxファイルに以下の一行を記載する必要があります。
◇licenses.licx
C1.C1Report.C1Report, C1.C1Report.4
旧文書番号
81478