or
<
telerik:RadGridView
x:Name
=
"LoanGrid"
ItemsSource
=
"{Binding Loans}"
IsBusy
=
"{Binding AreLoansBusy}"
CanUserSelect
=
"{Binding CanUserSelectLoans}"
SelectedItem
=
"{Binding SelectedLoan, Mode=TwoWay}"
Margin
=
"10,-6,10,10"
GroupRenderMode
=
"Flat"
IsReadOnly
=
"{Binding UserHasProjectRole, Converter={StaticResource NegationConverter}}"
ColumnWidth
=
"*"
CanUserInsertRows
=
"{Binding UserHasProjectRole}"
SelectionMode
=
"Single"
NewRowPosition
=
"Bottom"
AutoGenerateColumns
=
"False"
IsSynchronizedWithCurrentItem
=
"True"
ShowGroupPanel
=
"False"
IsFilteringAllowed
=
"False"
ValidatesOnDataErrors
=
"InEditMode"
ActionOnLostFocus
=
"CommitEdit"
Grid.Row
=
"0"
Grid.Column
=
"0"
Grid.ColumnSpan
=
"2"
>
<
telerik:RadGridView.Columns
>
<
telerik:GridViewComboBoxColumn
Header
=
"Loan Type"
IsReadOnly
=
"False"
DataMemberBinding
=
"{Binding LoanTypeId}"
SelectedValueMemberPath
=
"Id"
DisplayMemberPath
=
"Description"
ItemsSource
=
"{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.LoanTypes}"
Width
=
"Auto"
/>
<
telerik:GridViewDataColumn
UniqueName
=
"ApplicationAmount"
Header
=
"Application Amount"
DataMemberBinding
=
"{Binding ApplicationAmount, StringFormat=c2}"
TextAlignment
=
"Right"
Width
=
"Auto"
/>
<
telerik:GridViewDataColumn
Header
=
"Total Project Costs"
DataMemberBinding
=
"{Binding TotalProjectCosts, StringFormat=c2}"
TextAlignment
=
"Right"
Width
=
"Auto"
/>
<
telerik:GridViewDataColumn
Header
=
"Eligible Project Costs"
DataMemberBinding
=
"{Binding EligibleProjectCosts, StringFormat=c2}"
TextAlignment
=
"Right"
Width
=
"Auto"
/>
<
telerik:GridViewDataColumn
Header
=
"Interest Rate"
DataMemberBinding
=
"{Binding InterestRate, StringFormat='{}{0}%'}"
TextAlignment
=
"Right"
Width
=
"Auto"
/>
<
telerik:GridViewDataColumn
Header
=
"Indenture"
DataMemberBinding
=
"{Binding Indenture}"
Width
=
"Auto"
/>
<
telerik:GridViewDataColumn
Header
=
"EFC Bond Series"
DataMemberBinding
=
"{Binding EfcBondSeries}"
Width
=
"Auto"
/>
<
telerik:GridViewDataColumn
Header
=
"Auditing"
IsReadOnly
=
"True"
Width
=
"Auto"
>
<
telerik:GridViewDataColumn.CellTemplate
>
<
DataTemplate
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
TextBlock
Text
=
"{Binding LastUpdatedBy}"
/>
<
TextBlock
Text
=
"{Binding LastUpdatedDate, StringFormat=g}"
Margin
=
"5 0 0 0"
/>
</
StackPanel
>
</
DataTemplate
>
</
telerik:GridViewDataColumn.CellTemplate
>
</
telerik:GridViewDataColumn
>
</
telerik:RadGridView.Columns
>
<
i:Interaction.Triggers
>
<
i:EventTrigger
EventName
=
"RowEditEnded"
>
<
infrastructure:InvokeDelegateCommandAction
Command
=
"{Binding LoanRowEditEndedCommand}"
CommandParameter
=
"{Binding RelativeSource={RelativeSource Self}, Path=InvokeParameter}"
/>
</
i:EventTrigger
>
<
i:EventTrigger
EventName
=
"Deleting"
>
<
infrastructure:InvokeDelegateCommandAction
Command
=
"{Binding LoanRowDeletingCommand}"
CommandParameter
=
"{Binding RelativeSource={RelativeSource Self}, Path=InvokeParameter}"
/>
</
i:EventTrigger
>
<
i:EventTrigger
EventName
=
"RowValidating"
>
<
infrastructure:InvokeDelegateCommandAction
Command
=
"{Binding LoanRowValidatingCommand}"
CommandParameter
=
"{Binding RelativeSource={RelativeSource Self}, Path=InvokeParameter}"
/>
</
i:EventTrigger
>
</
i:Interaction.Triggers
>
</
telerik:RadGridView
>
public
QueryableDataServiceCollectionView<ProjectPhaseLoan> Loans {
get
;
private
set
; }
<
Window
x:Class
=
"TelerikDocxManipulationTest.MainWindow"
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
Title
=
"MainWindow"
Height
=
"800"
Width
=
"1000"
>
<
Grid
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"Auto"
/>
<
RowDefinition
Height
=
"*"
/>
</
Grid.RowDefinitions
>
<
telerik:DocxDataProvider
x:Name
=
"DocxDataProvider"
RichTextBox
=
"{Binding ElementName=DataInput}"
Docx
=
"{Binding Data, Mode=TwoWay}"
>
</
telerik:DocxDataProvider
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
Button
Grid.Column
=
"1"
Width
=
"100"
Margin
=
"10,0,0,0"
Click
=
"Import"
>
<
TextBlock
>
Import
</
TextBlock
>
</
Button
>
<
Button
Grid.Column
=
"1"
Width
=
"100"
Margin
=
"10,0,0,0"
Click
=
"Merge"
>
<
TextBlock
>
Merge
</
TextBlock
>
</
Button
>
<
Button
Grid.Column
=
"1"
Width
=
"100"
Margin
=
"10,0,0,0"
Click
=
"Export"
>
<
TextBlock
>
Export
</
TextBlock
>
</
Button
>
</
StackPanel
>
<
telerik:RadRichTextBox
x:Name
=
"DataInput"
Grid.Row
=
"1"
IsSpellCheckingEnabled
=
"False"
HorizontalScrollBarVisibility
=
"Hidden"
VerticalScrollBarVisibility
=
"Visible"
LayoutMode
=
"Paged"
/>
</
Grid
>
</
Window
>
using
Microsoft.Win32;
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.IO;
using
System.Linq;
using
System.Windows;
using
Telerik.Windows.Documents.Flow.FormatProviders.Docx;
using
Telerik.Windows.Documents.Flow.Model;
using
Telerik.Windows.Documents.Flow.Model.Collections;
namespace
TelerikDocxManipulationTest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public
partial
class
MainWindow : Window, INotifyPropertyChanged
{
public
MainWindow()
{
InitializeComponent();
DataContext =
this
;
}
/// <summary>
/// Telerik DocxFormatProvider
/// </summary>
private
DocxFormatProvider provider =
new
DocxFormatProvider();
/// <summary>
/// The binary data for the docx file
/// </summary>
private
IList<
byte
> mData =
new
List<
byte
>();
public
IList<
byte
> Data
{
get
{
return
mData;
}
set
{
mData = value;
OnPropertyChanged(
"Data"
);
}
}
/// <summary>
/// Import a docx file from disk
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private
void
Import(
object
sender, RoutedEventArgs e)
{
OpenFileDialog dialog =
new
OpenFileDialog();
dialog.Filter =
"docx files (*.docx)|*.docx"
;
dialog.RestoreDirectory =
true
;
if
(dialog.ShowDialog() ==
true
)
{
try
{
Data = File.ReadAllBytes(dialog.FileName).ToList();
}
catch
(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
/// <summary>
/// Merge the current document with a docx document from disk
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private
void
Merge(
object
sender, RoutedEventArgs e)
{
OpenFileDialog dialog =
new
OpenFileDialog();
dialog.Filter =
"docx files (*.docx)|*.docx"
;
dialog.RestoreDirectory =
true
;
if
(dialog.ShowDialog() ==
true
)
{
try
{
RadFlowDocument existingDocument = provider.Import(Data.ToArray());
RadFlowDocument mergeDocument = provider.Import(dialog.OpenFile());
existingDocument.Merge(mergeDocument);
Data = provider.Export(existingDocument).ToList();
}
catch
(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
/// <summary>
/// Export the current file data to disk
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private
void
Export(
object
sender, RoutedEventArgs e)
{
SaveFileDialog dialog =
new
SaveFileDialog();
dialog.DefaultExt =
"docx"
;
dialog.Filter =
"docx files (*.docx)|*.docx"
;
dialog.RestoreDirectory =
true
;
if
(dialog.ShowDialog() ==
true
)
{
using
(Stream output = dialog.OpenFile())
{
try
{
output.Write(Data.ToArray(), 0, Data.Count);
MessageBox.Show(
"Document exported."
);
}
catch
(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
#region INotifiedProperty Block
public
event
PropertyChangedEventHandler PropertyChanged;
protected
void
OnPropertyChanged(
string
propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if
(handler !=
null
)
{
handler(
this
,
new
PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
}