0

私は datagrid1 として Path と Filename の 2 つの列を持っています。1 つのボタンをクリックするだけですべてのファイルを別の場所にコピーできるように、パス列を list<> にバインドしたいと考えています。誰かが私を助けてくれますか?C# wpf コードを探しています。

Path            FileName
C:\Temp\abc.txt abc.txt
C:\Temp\xyz.txt xyz.txt
C:\Temp\a.txt   a.txt

コード

XAML

<DataGrid AutoGenerateColumns="False" Height="193" HorizontalAlignment="Left"
          Margin="169,6,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="200"              
          ItemsSource="{Binding}">
          <DataGrid.Columns>
              <DataGridTextColumn Header="Path" Binding="{Binding Path}" />
              <DataGridTextColumn Header="FileName" Binding="{Binding FileName}" />
          </DataGrid.Columns>
</DataGrid>

後ろに

public class ReportFiles
    {
        public string Path { get; set; }
        public string FileName { get; set; }
    }
4

2 に答える 2

0

基本的に私が行っているのは、ローカル ドライブからファイルを収集し、それらをすべて C:\ReportFiles にコピーすることです。ボタンを2つ作りました。添付して保存します。Attach は、ファイルを参照して取得します。dataGrid1 では、古いパスとファイル名を使用しています。すべてのファイルの収集が終了したら。保存ボタンをクリックします。これにより、データグリッドからパス列が取得され、データグリッドのパス列から C:\ReportFiles へのファイルのコピーが開始されます。ループがこの仕事をします。

問題はリストです。データグリッド列をコレクションのリストとして作成できません。これがクリアされることを願っています。

データグリッド コード:

<DataGrid AutoGenerateColumns="False" Height="193" HorizontalAlignment="Left" Margin="169,6,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="200" ItemsSource="{Binding ReportFiles}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Path" Binding="{Binding Path}" />
                    <DataGridTextColumn Header="FileName" Binding="{Binding FileName}" />
                </DataGrid.Columns>
            </DataGrid>

MainWindow.cs:

public partial class EditReport : Window
{
        public List<ReportFiles> listabove = new List<ReportFiles>();

 public class ReportFiles
    {
        public string RealName { get; set; }
        public string TargetName { get; set; }
    }

    private void buttonAttach_Click(object sender, RoutedEventArgs e)
        {
        Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
              if (dlg.ShowDialog() == true)
        {
foreach (string str in dlg.FileNames)
                     {
                     ReportFiles list = new ReportFiles();
                     list.RealName = str;
                     list.TargetName = filename;
                     dataGrid1.Items.Add(new { RealName = list.RealName, TargetName = list.TargetName });
            string fileName = @"C:\Temp\" + filename + System.IO.Path.GetExtension(str).Trim(); ;
                    if (File.Exists(fileName))
                    continue;
                    else
                        {
                        try
                        {
                             File.Copy(str, fileName);
                        }
                        catch (Exception err)
                             {
                             MessageBox.Show(err.Message);
                             return;
                             }
                        }
            }
        }
}

private void btnSave_Click(object sender, RoutedEventArgs e)
       {
            ReportFiles rep = new ReportFiles();
            DataRowView paths = (System.Data.DataRowView)dataGrid1.Items[0];
            rep.RealName = Convert.ToString(paths.Row.ItemArray[0]);

       }
}
于 2013-04-16T09:33:19.677 に答える