Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单击按钮从WPF Datagrid获取选定的报告文件行_C#_Wpf - Fatal编程技术网

C# 单击按钮从WPF Datagrid获取选定的报告文件行

C# 单击按钮从WPF Datagrid获取选定的报告文件行,c#,wpf,C#,Wpf,这是我关于stackoverflow的第一个问题,我对C#编程一无所知,所以请耐心听我说。我使用WPF创建了一个应用程序,其中显示了datagrid中扩展名为.rpt的文件列表。datagrid包含文件名列表,datagrid中还有一个复选框列。单击按钮时,这些文件将从文件夹浏览器动态填充到网格中。当我点击第二个按钮(打印,因为我需要调用服务来打印所选文件)时,我被困在检索这些文件以便打印的部分 这是我迄今为止一直尝试的代码片段: public partial class MainWindow

这是我关于stackoverflow的第一个问题,我对C#编程一无所知,所以请耐心听我说。我使用WPF创建了一个应用程序,其中显示了datagrid中扩展名为.rpt的文件列表。datagrid包含文件名列表,datagrid中还有一个复选框列。单击按钮时,这些文件将从文件夹浏览器动态填充到网格中。当我点击第二个按钮(打印,因为我需要调用服务来打印所选文件)时,我被困在检索这些文件以便打印的部分

这是我迄今为止一直尝试的代码片段:

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循环是我在某处查找的一个代码片段,它只是一个带有标题的消息框,用于显示网格中的文件,因为我还不知道如何通过单击按钮提取报告以直接打印,而不仅仅是显示它们。