2011-11-30 64 views
0

我有一个Silverlight中的数据网格,它有一个绑定到属性的复选框列。Silverlight Datagrid - 将选定项目导出到Excel

<sdk:DataGridCheckBoxColumn x:Name="chkboxSelect" CanUserReorder="False" CanUserResize="False" 
    Binding="{Binding CopyToForecast}" /> 

我也有一个导出到excel从datagrid看起来像这样。

public static void ExportDataGrid(DataGrid dGrid) 
    { 
     SaveFileDialog objSFD = new SaveFileDialog() { DefaultExt = "csv", Filter = "CSV Files (*.csv)|*.csv|Excel XML (*.xml)|*.xml|All files (*.*)|*.*", FilterIndex = 1 }; 
     if (objSFD.ShowDialog() == true) 
     { 
      string strFormat = objSFD.SafeFileName.Substring(objSFD.SafeFileName.IndexOf('.') + 1).ToUpper(); 
      StringBuilder strBuilder = new StringBuilder(); 
      if (dGrid.ItemsSource == null) return; 
      List<string> lstFields = new List<string>(); 
      if (dGrid.HeadersVisibility == DataGridHeadersVisibility.Column || dGrid.HeadersVisibility == DataGridHeadersVisibility.All) 
      { 
       foreach (DataGridColumn dgcol in dGrid.Columns) 
        lstFields.Add(FormatField(dgcol.Header.ToString(), strFormat)); 
       BuildStringOfRow(strBuilder, lstFields, strFormat); 
      } 
      foreach (object data in dGrid.ItemsSource) 
      { 
       lstFields.Clear(); 
       foreach (DataGridColumn col in dGrid.Columns) 
       { 
        string strValue = ""; 
        Binding objBinding = null; 
        if (col is DataGridBoundColumn) 
         objBinding = (col as DataGridBoundColumn).Binding; 
        if (col is DataGridTemplateColumn) 
        { 
         //This is a template column... let us see the underlying dependency object 
         DependencyObject objDO = (col as DataGridTemplateColumn).CellTemplate.LoadContent(); 
         FrameworkElement oFE = (FrameworkElement)objDO; 
         FieldInfo oFI = oFE.GetType().GetField("TextProperty"); 
         if (oFI != null) 
         { 
          if (oFI.GetValue(null) != null) 
          { 
           if (oFE.GetBindingExpression((DependencyProperty)oFI.GetValue(null)) != null) 
            objBinding = oFE.GetBindingExpression((DependencyProperty)oFI.GetValue(null)).ParentBinding; 
          } 
         } 
        } 
        if (objBinding != null) 
        { 
         if (objBinding.Path.Path != "") 
         { 
          PropertyInfo pi = data.GetType().GetProperty(objBinding.Path.Path); 
          if (pi != null) strValue = pi.GetValue(data, null).ToString(); 
         } 
         if (objBinding.Converter != null) 
         { 
          if (strValue != "") 
           strValue = objBinding.Converter.Convert(strValue, typeof(string), objBinding.ConverterParameter, objBinding.ConverterCulture).ToString(); 
          else 
           strValue = objBinding.Converter.Convert(data, typeof(string), objBinding.ConverterParameter, objBinding.ConverterCulture).ToString(); 
         } 
        } 
        lstFields.Add(FormatField(strValue, strFormat)); 
       } 
       BuildStringOfRow(strBuilder, lstFields, strFormat); 
      } 
      StreamWriter sw = new StreamWriter(objSFD.OpenFile()); 
      if (strFormat == "XML") 
      { 
       //Let us write the headers for the Excel XML 
           } 
      sw.Write(strBuilder.ToString()); 
      if (strFormat == "XML") 
      { 
       sw.WriteLine("</Table>"); 
       sw.WriteLine("</Worksheet>"); 
       sw.WriteLine("</Workbook>"); 
      } 
      sw.Close(); 
     } 
    } 

如何只将选定(检查)的行从datagrid导出到excel?

回答

0

只需将grid.Itemsource设置为绑定属性和wham的选定值即可。完成。

相关问题