C# 单击按钮从WPF Datagrid获取选定的报告文件行
这是我关于stackoverflow的第一个问题,我对C#编程一无所知,所以请耐心听我说。我使用WPF创建了一个应用程序,其中显示了datagrid中扩展名为.rpt的文件列表。datagrid包含文件名列表,datagrid中还有一个复选框列。单击按钮时,这些文件将从文件夹浏览器动态填充到网格中。当我点击第二个按钮(打印,因为我需要调用服务来打印所选文件)时,我被困在检索这些文件以便打印的部分 这是我迄今为止一直尝试的代码片段:C# 单击按钮从WPF Datagrid获取选定的报告文件行,c#,wpf,C#,Wpf,这是我关于stackoverflow的第一个问题,我对C#编程一无所知,所以请耐心听我说。我使用WPF创建了一个应用程序,其中显示了datagrid中扩展名为.rpt的文件列表。datagrid包含文件名列表,datagrid中还有一个复选框列。单击按钮时,这些文件将从文件夹浏览器动态填充到网格中。当我点击第二个按钮(打印,因为我需要调用服务来打印所选文件)时,我被困在检索这些文件以便打印的部分 这是我迄今为止一直尝试的代码片段: public partial class MainWindow
public partial class MainWindow : Window
{
public class ReportFile
{
public string Path { get; set; }
public string FileName { get; set; }
}
private void Button_Click(object sender, RoutedEventArgs e)
{
string inputPath = AppDomain.CurrentDomain.BaseDirectory;
System.Windows.Forms.FolderBrowserDialog fldDlg = new System.Windows.Forms.FolderBrowserDialog();
fldDlg.SelectedPath = AppDomain.CurrentDomain.BaseDirectory;
DialogResult result = fldDlg.ShowDialog();
foreach (string str in Directory.GetFiles(fldDlg.SelectedPath))
{
ReportFile reportFile = new ReportFile();
reportFile.Path = str;
reportFile.FileName = System.IO.Path.GetFileName(str);
dataGrid1.Items.Add(reportFile);
}
}
private void button_Click_1(object sender, RoutedEventArgs e)
{
foreach (ReportFile drv in dataGrid1.SelectedItems.OfType<ReportFile>())
{
if (drv != null)
{
DataRow row = drv.Row;
Title = row.ItemArray[3].ToString();
System.Windows.MessageBox.Show(Title.ToString());
}
}
var TransactionFactory = new TransactionFactory();
var Transaction = TransactionFactory.NewTransactionString();
var EnvironmentValue = (string)cmbEnvironment.SelectedValue;
var CirieEngineServiceClientFactory = new CirieEngineServiceClientFactory(EnvironmentValue);
var CirieEngineServiceClient = CirieEngineServiceClientFactory.NewCirieEngineServiceClient();
var Form = new Cirie.Form()
{
Path = string.Empty,
Title = string.Empty
};
var PackageID = Convert.ToInt16(txtPackageID.SelectedText);
var Generation = Convert.ToInt16(txtGeneration.SelectedText);
var formList = new List<Cirie.Form>();
var stream = CirieEngineServiceClient.PrintFormCollection
(Transaction,
new Collection<Cirie.Form>(formList),
PackageID,
Generation
);
}
}
公共部分类主窗口:窗口
{
公共类报告文件
{
公共字符串路径{get;set;}
公共字符串文件名{get;set;}
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
字符串inputPath=AppDomain.CurrentDomain.BaseDirectory;
System.Windows.Forms.FolderBrowserDialog fldDlg=新建System.Windows.Forms.FolderBrowserDialog();
fldDlg.SelectedPath=AppDomain.CurrentDomain.BaseDirectory;
DialogResult=fldDlg.ShowDialog();
foreach(Directory.GetFiles(fldDlg.SelectedPath)中的字符串str)
{
ReportFile ReportFile=新的ReportFile();
reportFile.Path=str;
reportFile.FileName=System.IO.Path.GetFileName(str);
dataGrid1.Items.Add(reportFile);
}
}
私有无效按钮\u单击\u 1(对象发送者,路由目标)
{
foreach(dataGrid1.SelectedItems.OfType()中的报告文件drv)
{
如果(drv!=null)
{
数据行行=drv.row;
Title=row.ItemArray[3].ToString();
System.Windows.MessageBox.Show(Title.ToString());
}
}
var TransactionFactory=新TransactionFactory();
var Transaction=TransactionFactory.NewTransactionString();
var EnvironmentValue=(字符串)cmbEnvironment.SelectedValue;
var CirieEngineServiceClientFactory=新CirieEngineServiceClientFactory(环境值);
var CirieEngineServiceClient=CirieEngineServiceClientFactory.NewCirieEngineServiceClient();
var Form=new Cirie.Form()
{
Path=string.Empty,
Title=string.Empty
};
var PackageID=Convert.ToInt16(txtPackageID.SelectedText);
var生成=转换为16(txtGeneration.SelectedText);
var formList=新列表();
var stream=CirieEngineServiceClient.PrintFormCollection
(交易,
新收藏(表格列表),
包装,
一代
);
}
}
但我不确定它是否正确,因为引发了一个异常:无法将“ReportFile”类型的对象强制转换为“System.Data.DataRowView”类型
我真的非常感谢你在这方面的帮助 您可以使用
of type
方法将SelectedItems
强制转换为ReportFile
对象,然后访问ReportFile
类的任何属性:
foreach (ReportFile drv in dataGrid1.SelectedItems.OfType<ReportFile>())
{
//...
}
foreach(dataGrid1.SelectedItems.OfType()中的报告文件drv)
{
//...
}
您可以使用of type
方法将SelectedItems
强制转换为ReportFile
对象,然后访问ReportFile
类的任何属性:
foreach (ReportFile drv in dataGrid1.SelectedItems.OfType<ReportFile>())
{
//...
}
foreach(dataGrid1.SelectedItems.OfType()中的报告文件drv)
{
//...
}
这解决了错误!非常感谢。我还想知道如何通过单击按钮检索数据并将其发送到打印服务。由于我现在拥有的代码能够在消息框中显示检索到的文件,我想我已经回答了如何检索数据了?或者你指的是什么数据?我编辑了我的问题并添加了代码,如果这有助于更好地理解我到底在寻找什么。不,它没有。报表文件具有路径和文件名。你对哪一个感兴趣?标题是什么?很抱歉,代码不太完美,这就是我寻求帮助的原因。由于我需要通过呼叫服务打印报告,并且报告在我的本地系统中,因此我相信我需要路径。foreach循环是我在某处查找到的一个代码片段,它只是一个带有标题的消息框,用于显示网格中的文件,因为我还不知道如何通过单击按钮直接提取报告进行打印,而不仅仅是显示。这解决了错误!非常感谢。我还想知道如何通过单击按钮检索数据并将其发送到打印服务。由于我现在拥有的代码能够在消息框中显示检索到的文件,我想我已经回答了如何检索数据了?或者你指的是什么数据?我编辑了我的问题并添加了代码,如果这有助于更好地理解我到底在寻找什么。不,它没有。报表文件具有路径和文件名。你对哪一个感兴趣?标题是什么?很抱歉,代码不太完美,这就是我寻求帮助的原因。由于我需要通过呼叫服务打印报告,并且报告在我的本地系统中,因此我相信我需要路径。foreach循环是我在某处查找的一个代码片段,它只是一个带有标题的消息框,用于显示网格中的文件,因为我还不知道如何通过单击按钮提取报告以直接打印,而不仅仅是显示它们。