Member 13015190 Ответов: 1

Wpf gridview с флажком: получение выбранных строк файлов отчетов при нажатии кнопки


Я создал приложение с использованием WPF, в котором кнопка (выбрать) открывает обозреватель папок в папке по указанному по умолчанию / указанному пути, указанному в текстовом поле, а таблица данных заполняется всеми файлами в этой папке (файлы .rpt). Столбцы в сетке данных - это путь, имя файла, а также есть столбец для флажка. Я хочу получить файлы, которые я выбираю в сетке данных с помощью флажка, и это должно быть сделано, нажав кнопку, поскольку кнопка отправит эти файлы Код, который я придумал, мне удалось отобразить путь к выбранному файлу в окне сообщения, но я застрял на том, как извлечь эти файлы из сетки и отправить их в службу печати с помощью этого нажатия кнопки . Так что в основном у меня две проблемы:

1. флажок отображает не все проверенные строки, а только первую / последнюю выбранную строку
2. я хочу извлечь имя файла/путь к файлу в зависимости от того, что работает, чтобы получить файлы для отправки в службу печати

Что я уже пробовал:

namespace DataGridCheckBoxDisplayApp
{


    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)
                            {
                            string path = drv.Path;
                            //drv.Path = drv.ItemArray[3].ToString();
                            System.Windows.MessageBox.Show(drv.Path);
                            }

                  }
                
            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
                 );
        }
    }
}

Graeme_Grant

Вы используете GridView или DataGrid? Без XAML-код, ваш код предполагает, элемент управления DataGrid.

1 Ответов

Рейтинг:
1

Graeme_Grant

Если вы добавите логическое поле в свой ReportFile модель класса называется IsChecked или IsSelected и привяжите к нему флажок, тогда вам просто нужно будет проверить каждую модель. Напр.:

var selected = dataGrid1.Items.Where(x => x.IsChecked).ToList();
Не забывай
using System.Linq;