2015-12-02 2 views
0

«InvokePaint» отображает ошибки, «это» из метода InvokePaint должен быть классом, но я не знаю, какой класс он должен быть , любая помощь будет оценена по достоинству.Как напечатать DataGrid в WPF, а не DataGridView

SqlDataAdapter da = new SqlDataAdapter("Select * from CallRegister", data.getCon()); 
       DataTable dt = new DataTable("Call Reciept"); 
       da.Fill(dt); 
       DataGrid dg = new DataGrid(); 
       dg.ItemsSource = dt.DefaultView; 
       System.Drawing.Size m = new System.Drawing.Size((int)dg.Width, (int)dg.Height); 

       System.Windows.Forms.PaintEventArgs myPaintArgs = new System.Windows.Forms.PaintEventArgs(e.Graphics, new System.Drawing.Rectangle(new System.Drawing.Point(0, 0),m)); 
       this.InvokePaint(dg, myPaintArgs); 
+0

Вы должны рассмотреть возможность удаления ненужного кода, и после простой пример, который пользователи SO может проверить и попробовать чтобы помочь вам. В своем посте вы можете легко избавиться от SqlDataAdapter или чего-то еще, связанного с этим, создать xaml, который содержит образцы данных для DataGrid, которые вы хотите использовать в качестве примера, и показать простую схему класса и метода, который содержит вызов на "this.InvokePaint (...)". Выполнение этих действий поможет вам получить ответы - заданный вопрос не очень хорошо написан. – Vatsan

ответ

0

Этот метод может быть вызван только из WindowsForms управления as MSDN says:

Вызывает событие Paint для указанного элемента управления. Пространство имен:
System.Windows.Forms Сборка: System.Windows.Forms (в System.Windows.Forms.dll)

Так что этот код должен вызываться из размещенного WinForms управления внутри проекта WPF:

this.InvokePaint((dg, myPaintArgs); 

Обновление. Для печати DataGrid:

XAML:

<DataGrid ItemsSource="{Binding Path=Persons, Mode=TwoWay}" Name="dataGrid"/> 
<Button Grid.Row="1" Click="Button_Click" Content="Print DataGrid"/> 

Код позади:

private void Button_Click(object sender, RoutedEventArgs e) 
{    
    var pd = new PrintDialog(); 
    var result = pd.ShowDialog(); 
    if (result.HasValue && result.Value) 
     pd.PrintVisual(dataGrid, "My WPF printing a DataGrid"); 
} 
+0

Я пытаюсь напечатать datagrid (который собирает информацию из таблицы базы данных) в бумагу, когда я проверил онлайн, то есть код, я видел. Любая помощь или идеи? –

+0

@EdwardsMoses, см. Обновленный код – StepUp

+0

Спасибо, это сработало. Но я хочу попытаться поместить другую информацию на распечатанную страницу, как бы я это сделал. –

0
PrintDialog printDialog = new PrintDialog(); 
printDialog.PrintVisual(dataGrid, "Print Grid");