Как установить значение Excel для Datagrid в C #? - PullRequest
0 голосов
/ 29 мая 2019

xmal.c

  <StackPanel HorizontalAlignment="Left" Height="337" VerticalAlignment="Top" Width="514" Margin="103,39,0,0">
            <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Source=Lecturers}" >
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
                    <DataGridTextColumn Header="Surname" Binding="{Binding Surname}"/>
                    <DataGridTextColumn Header="Phone" Binding="{Binding Phone_Number}" />
                </DataGrid.Columns>
            </DataGrid>
        </StackPanel>

Строка и столбец Excel:

Name   Surname   Phone_Number

A        C           123

C        C           124



Excel.Application app=new Excel.Application();
Excel.Workbook workbook=app.Workbooks.Open(file,Type.Missing);
Excel.WorkSheet sheet=workbook.Sheets[i];
Excel.Range range=sheet.UsedRange;
Excel.Range excelrange=(Excel.Range)sheet.get_Range("A1:C100",Type.Missing);
Dictionary<string,string> dict=new Dictionary<string,string>();
foreach(Excel.Range cell in excelrange)
{
string cellindex=cell.ge_Address(//this area missing value);
string cellvalue=Convert.ToString(cell.Value);
Lecturers.DataSource=cellvalue
}

}

Привет. Я получил значения в Excel.Это происходит так же.Но я не мог этого сделать, когда хотел установить сетку данных.Как установить сетку данных?Та же строка сетки данных учитывается в Excel.

 **Lecturers.DataSource=cellvalue** 

в этой строке используется установленная сетка данных.Но я не устанавливаю сетку данных.

1 Ответ

0 голосов
/ 30 мая 2019

Сначала создайте класс, который представляет ваши данные

    public class Lecturer
    {
       public string Name { get; set;}

       public string Surname { get; set;}

       public int Phone_Number { get; set;}
    }

Затем в вашей ViewModel объявите коллекцию ObservableCollection, в которой вы сможете хранить в ней объекты Read. ObservableCollection реализует интерфейс INotifyPropertyChanged, который позволит вашему представлению получать уведомления об изменении данных в ViewModel.

[...]

public ObservableCollection<Lecturer> Lecturers { get; set; }

public MyViewModel()
{
  Lecturers = new ObservableCollection<Lecturer>();
}

public void ExtractLecturersFromXlFile(string filePath)
{
 Excel.Application xlApp = new Excel.Application();
 Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(filePath);
 Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];

 Excel.Range range = sheet.UsedRange;
 Excel.Range excelrange = (Excel.Range)sheet.get_Range("A1:C100",Type.Missing);

 // Iterate through datas, fill Lecturer's object and add it to the Observable                 
 // Collection


 // Cleanup  
 GC.Collect();
 GC.WaitForPendingFinalizers();

 Marshal.ReleaseComObject(xlWorksheet);

 // Close and release  
 xlWorkbook.Close();
 Marshal.ReleaseComObject(xlWorkbook);

 // Quit and release  
 xlApp.Quit();
 Marshal.ReleaseComObject(xlApp);

}

А в XAML

     <StackPanel HorizontalAlignment="Left" Height="337" VerticalAlignment="Top"                   Width="514" Margin="103,39,0,0">
        <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Lecturers}" >
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
                <DataGridTextColumn Header="Surname" Binding="{Binding Surname}"/>
                <DataGridTextColumn Header="Phone" Binding="{Binding Phone_Number}" />
            </DataGrid.Columns>
        </DataGrid>
    </StackPanel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...