如何从数据集中获取数据以显示在 ReportViewer 中?
How do I get data from a dataset to show in a ReportViewer?
我在 WindowsFormHost 中创建了一个 ReportViewer。这是我的 XAML 代码。
<Grid x:Name="grdPrintingGrid" Visibility="Visible" Height="440" Margin="105, 0, 0 0" VerticalAlignment="Top" Grid.ColumnSpan="2" >
<TextBox x:Name="txtPRTTitle" IsReadOnly="True" HorizontalAlignment="Left" Height="32" Margin="10,4,0,0" VerticalAlignment="Top" Width="450" FontFamily="Arial" FontSize="18.667" Background="#FFE8F9FF" BorderThickness="0"/>
<WindowsFormsHost x:Name="wfhFormsHost" Visibility="Hidden" HorizontalAlignment="Left" Height="312" Margin="10,54,0,0" VerticalAlignment="Top" Width="683">
<rv:ReportViewer x:Name="rvWeeklyList" />
</WindowsFormsHost>
<Grid x:Name="grdPWLGrid" Visibility="Visible" Height="440" Margin="0, 0, 0 0" VerticalAlignment="Top">
<DataGrid IsReadOnly="True" Name="dgPWLCGrid" ScrollViewer.HorizontalScrollBarVisibility="Hidden" Background="#FFE8F9FF" HorizontalAlignment="Left" VerticalAlignment="Top" Height="255" Margin="10,62,0,0" Width="693" BorderThickness="1" BorderBrush="Black" CanUserResizeRows="False" >
</DataGrid>
<Button x:Name="btnPWLPrint" Content="Print" HorizontalAlignment="Left" Height="26" Margin="307,388,0,0" VerticalAlignment="Top" Width="74" FontFamily="Arial" FontSize="14.667" Background="#FFEEFFFF" Click="btnPWLPrint_Click"/>
</Grid>
</Grid>
我正在调用数据库中的存储过程来获取数据。我使用报告向导创建我的报告 rdlc。我称之为PrintWeeklyList.rdlc
。对于选择数据源类型,我 selected 数据库。对于选择数据库模型 I select 数据集。对于数据库对象,我选择了一个名为 GetPrintWeeklyListData
的存储过程。我将数据源命名为 PrintWeeklyListDataSet
。我给数据集命名为 PrintWeeklyListDS
.
这是我加载 ReportViewer 的 C# 代码:
private void RVWeeklyList_Load(object sender, EventArgs e)
{
if (!isReportViewerLoaded)
{
ReportViewer rvWeeklyList = new ReportViewer();
Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 =
new Microsoft.Reporting.WinForms.ReportDataSource();
PrintWeeklyListDataSet dataset = new PrintWeeklyListDataSet();
dataset.BeginInit();
reportDataSource1.Name = "PrintWeeklyListDS"; //Name of the report dataset in our .RDLC file
reportDataSource1.Value = dataset.GetPrintWeeklyListData;
rvWeeklyList.LocalReport.DataSources.Add(reportDataSource1);
//rvWeeklyList.ServerReport.GetDataSources();
rvWeeklyList.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;
rvWeeklyList.LocalReport.ReportEmbeddedResource = "PrintWeeklyList.rdlc";
dataset.EndInit();
PrintWeeklyListDataSetTableAdapters.GetPrintWeeklyListDataTableAdapter pwlTableAdapter =
new PrintWeeklyListDataSetTableAdapters.GetPrintWeeklyListDataTableAdapter();
pwlTableAdapter.ClearBeforeFill = true;
pwlTableAdapter.Fill(dataset.GetPrintWeeklyListData);
rvWeeklyList.LocalReport.Refresh();
rvWeeklyList.RefreshReport();
isReportViewerLoaded = true;
}
}
当我单步执行代码时,我看到数据集和 rvWeeklyList 都包含来自存储过程的数据。我一直在搜索 Google,但我无法弄清楚我缺少什么来显示数据。任何代码示例将不胜感激。
首先,将WindowsFormsHost
改为Visibility="Visible"
其次,确保 PrintWeeklyList.rdlc
文件的 Build Action
设置为 Embedded Resource
现在使用下面修改后的代码,并确保将子字符串 <VisualStudioProjectName>
替换为 ReportEmbeddedResource
的 Visual Studio 项目名称:
public MainWindow()
{
InitializeComponent();
rvWeeklyList.Load += RVWeeklyList_Load;
}
private void RVWeeklyList_Load(object sender, EventArgs e)
{
if (!isReportViewerLoaded)
{
Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 =
new Microsoft.Reporting.WinForms.ReportDataSource();
PrintWeeklyListDataSet dataset = new PrintWeeklyListDataSet();
dataset.BeginInit();
reportDataSource1.Name = "PrintWeeklyListDS";
reportDataSource1.Value = dataset.GetPrintWeeklyListData;
rvWeeklyList.LocalReport.DataSources.Add(reportDataSource1);
rvWeeklyList.LocalReport.ReportEmbeddedResource =
@"<VisualStudioProjectName>.PrintWeeklyList.rdlc";
dataset.EndInit();
PrintWeeklyListDataSetTableAdapters.GetPrintWeeklyListDataTableAdapter pwlTableAdapter =
new PrintWeeklyListDataSetTableAdapters.GetPrintWeeklyListDataTableAdapter();
pwlTableAdapter.ClearBeforeFill = true;
pwlTableAdapter.Fill(dataset.GetPrintWeeklyListData);
rvWeeklyList.RefreshReport();
isReportViewerLoaded = true;
}
}
MSDN 文章参考:https://msdn.microsoft.com/en-us/library/hh273267.aspx
我在 WindowsFormHost 中创建了一个 ReportViewer。这是我的 XAML 代码。
<Grid x:Name="grdPrintingGrid" Visibility="Visible" Height="440" Margin="105, 0, 0 0" VerticalAlignment="Top" Grid.ColumnSpan="2" >
<TextBox x:Name="txtPRTTitle" IsReadOnly="True" HorizontalAlignment="Left" Height="32" Margin="10,4,0,0" VerticalAlignment="Top" Width="450" FontFamily="Arial" FontSize="18.667" Background="#FFE8F9FF" BorderThickness="0"/>
<WindowsFormsHost x:Name="wfhFormsHost" Visibility="Hidden" HorizontalAlignment="Left" Height="312" Margin="10,54,0,0" VerticalAlignment="Top" Width="683">
<rv:ReportViewer x:Name="rvWeeklyList" />
</WindowsFormsHost>
<Grid x:Name="grdPWLGrid" Visibility="Visible" Height="440" Margin="0, 0, 0 0" VerticalAlignment="Top">
<DataGrid IsReadOnly="True" Name="dgPWLCGrid" ScrollViewer.HorizontalScrollBarVisibility="Hidden" Background="#FFE8F9FF" HorizontalAlignment="Left" VerticalAlignment="Top" Height="255" Margin="10,62,0,0" Width="693" BorderThickness="1" BorderBrush="Black" CanUserResizeRows="False" >
</DataGrid>
<Button x:Name="btnPWLPrint" Content="Print" HorizontalAlignment="Left" Height="26" Margin="307,388,0,0" VerticalAlignment="Top" Width="74" FontFamily="Arial" FontSize="14.667" Background="#FFEEFFFF" Click="btnPWLPrint_Click"/>
</Grid>
</Grid>
我正在调用数据库中的存储过程来获取数据。我使用报告向导创建我的报告 rdlc。我称之为PrintWeeklyList.rdlc
。对于选择数据源类型,我 selected 数据库。对于选择数据库模型 I select 数据集。对于数据库对象,我选择了一个名为 GetPrintWeeklyListData
的存储过程。我将数据源命名为 PrintWeeklyListDataSet
。我给数据集命名为 PrintWeeklyListDS
.
这是我加载 ReportViewer 的 C# 代码:
private void RVWeeklyList_Load(object sender, EventArgs e)
{
if (!isReportViewerLoaded)
{
ReportViewer rvWeeklyList = new ReportViewer();
Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 =
new Microsoft.Reporting.WinForms.ReportDataSource();
PrintWeeklyListDataSet dataset = new PrintWeeklyListDataSet();
dataset.BeginInit();
reportDataSource1.Name = "PrintWeeklyListDS"; //Name of the report dataset in our .RDLC file
reportDataSource1.Value = dataset.GetPrintWeeklyListData;
rvWeeklyList.LocalReport.DataSources.Add(reportDataSource1);
//rvWeeklyList.ServerReport.GetDataSources();
rvWeeklyList.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;
rvWeeklyList.LocalReport.ReportEmbeddedResource = "PrintWeeklyList.rdlc";
dataset.EndInit();
PrintWeeklyListDataSetTableAdapters.GetPrintWeeklyListDataTableAdapter pwlTableAdapter =
new PrintWeeklyListDataSetTableAdapters.GetPrintWeeklyListDataTableAdapter();
pwlTableAdapter.ClearBeforeFill = true;
pwlTableAdapter.Fill(dataset.GetPrintWeeklyListData);
rvWeeklyList.LocalReport.Refresh();
rvWeeklyList.RefreshReport();
isReportViewerLoaded = true;
}
}
当我单步执行代码时,我看到数据集和 rvWeeklyList 都包含来自存储过程的数据。我一直在搜索 Google,但我无法弄清楚我缺少什么来显示数据。任何代码示例将不胜感激。
首先,将WindowsFormsHost
改为Visibility="Visible"
其次,确保 PrintWeeklyList.rdlc
文件的 Build Action
设置为 Embedded Resource
现在使用下面修改后的代码,并确保将子字符串 <VisualStudioProjectName>
替换为 ReportEmbeddedResource
的 Visual Studio 项目名称:
public MainWindow()
{
InitializeComponent();
rvWeeklyList.Load += RVWeeklyList_Load;
}
private void RVWeeklyList_Load(object sender, EventArgs e)
{
if (!isReportViewerLoaded)
{
Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 =
new Microsoft.Reporting.WinForms.ReportDataSource();
PrintWeeklyListDataSet dataset = new PrintWeeklyListDataSet();
dataset.BeginInit();
reportDataSource1.Name = "PrintWeeklyListDS";
reportDataSource1.Value = dataset.GetPrintWeeklyListData;
rvWeeklyList.LocalReport.DataSources.Add(reportDataSource1);
rvWeeklyList.LocalReport.ReportEmbeddedResource =
@"<VisualStudioProjectName>.PrintWeeklyList.rdlc";
dataset.EndInit();
PrintWeeklyListDataSetTableAdapters.GetPrintWeeklyListDataTableAdapter pwlTableAdapter =
new PrintWeeklyListDataSetTableAdapters.GetPrintWeeklyListDataTableAdapter();
pwlTableAdapter.ClearBeforeFill = true;
pwlTableAdapter.Fill(dataset.GetPrintWeeklyListData);
rvWeeklyList.RefreshReport();
isReportViewerLoaded = true;
}
}
MSDN 文章参考:https://msdn.microsoft.com/en-us/library/hh273267.aspx