//-------------------------------------------------------------------------------------
 /// <summary>
 /// Инициализирующий конструктор.
 /// </summary>
 public SimDataGridViewFindForm(SimDataGridView finistDataGridView, string prevFind) : this()
 {
  view = finistDataGridView;
  timer.Tick += new EventHandler(timer_Tick);
  textBoxText.Text = prevFind;
 }
		//-------------------------------------------------------------------------------------
		#region << Overrides Methods >>    
		/// <summary>
		/// Initialize
		/// </summary>
		/// <param name="component"></param>
		public override void Initialize(IComponent component)
		{
			base.Initialize(component);
			//base.AutoResizeHandles = true;
			this.ex = component as SimDataGridViewEx;
			this.grid = this.ex.Grid;
			base.EnableDesignMode(this.ex.Grid, "Grid");
			this.designerHost = (IDesignerHost)component.Site.GetService(typeof(IDesignerHost));
		}
Beispiel #3
0
		//-------------------------------------------------------------------------------------
		/// <summary>
		/// ћетод экспорта данных в файл Excel.
		/// </summary>
		/// <param name="table">“аблица, содержаща¤ экспортируемые данные.</param>
		/// <param name="xlsFile">‘айл xls, в который экспортируютс¤ данные.</param>
		public static void ExportToExcel(SimDataGridView table, string xlsFile)
		{
			FileStream fss = null;
			IStorage stg = null;
			IStream3 stream = null;
			uint len = 0;
			byte[] arr = null;
			LittleEndianWord w = new LittleEndianWord();

			//Dictionary<string, uint> strTable = new Dictionary<string,uint>();
			//uint strCount = 0;
			try
			{
				if(table.Rows.Count > ushort.MaxValue - 1)
					throw new Exception(String.Format(" оличество строк должно быть меньше {0}!", ushort.MaxValue - 1));

				#region —оздаем пустой xls файл.
				FileStream file = File.Create(xlsFile);
				byte[] tes = (byte[])global::Sim.Controls.Properties.Resources.Excel;
				file.Write(tes, 0, tes.Length);
				file.Flush();
				file.Close();
				#endregion —оздаем пустой xls файл.

				#region ќткрываем хранилище дл¤ чтени¤ и временный файл дл¤ записи
				uint hr = StgOpenStorageEx(xlsFile, (uint)(
																														StorageModes.STGM_DIRECT | StorageModes.STGM_READWRITE | StorageModes.STGM_SHARE_EXCLUSIVE),
																														0, 0, (IntPtr)0, (IntPtr)0, ref StructuredStorageGuid, ref stg);
				if(hr > 0)
					throw new Exception("ќшибка при открытии xls файла дл¤ чтени¤!");

				hr = stg.OpenStream("Workbook", 0, (uint)(
																													StorageModes.STGM_READ | StorageModes.STGM_DIRECT | StorageModes.STGM_SHARE_EXCLUSIVE),
																												0, out stream);
				if(hr > 0)
					throw new Exception("ќшибка при открытии Workbook потока временного xls файла!");

				fss = new FileStream(Environment.GetEnvironmentVariable("TEMP") + "\\excel_export.fe", FileMode.Create);
				#endregion ќткрываем хранилище дл¤ чтени¤ и временный файл дл¤ записи

				#region „итаем и записываем до данных
				while(true)
				{
					if((hr = stream.Read(w, 2, out len)) != 0 || len == 0)
						break;
					if(w == 0x0200)
					{
						if((hr = stream.Read(w, 2, out len)) != 0 || len == 0)
							throw new Exception(String.Format("ќшибка в записи, hr = {0}, len = {1}!", hr.ToString("X"), len));
						arr = new byte[w];
						if((hr = stream.Read(arr, w, out len)) != 0 || len == 0)
							throw new Exception(String.Format("ќшибка в записи, hr = {0}, len = {1}!", hr.ToString("X"), len));
						break;
					}
					fss.Write(w, 0, 2);
					if((hr = stream.Read(w, 2, out len)) != 0 || len == 0)
						throw new Exception(String.Format("ќшибка в записи, hr = {0}, len = {1}!", hr.ToString("X"), len));
					fss.Write(w, 0, 2);
					if(w > 0)
					{
						arr = new byte[w];
						if((hr = stream.Read(arr, w, out len)) != 0 || len == 0)
							throw new Exception(String.Format("ќшибка в записи, hr = {0}, len = {1}!", hr.ToString("X"), len));
						fss.Write(arr, 0, w);
					}
				}
				#endregion „итаем и записываем до данных

				#region «аписываем данные
				arr = Build_DIMENSIONS_Record(table.Rows.Count, table.Columns.Count);
				fss.Write(arr, 0, arr.Length);
				uint offsetFirstRow = 0;
				ushort rowset = 0;
				ushort row = 0;
				ushort[] cellBlocksOffsets = null;

				while(row < table.Rows.Count + 1)
				{
					if((table.Rows.Count + 1 - row) >= 32)
						rowset = 32;
					else
						rowset = (ushort)(table.Rows.Count + 1 - row);

					cellBlocksOffsets = new ushort[rowset];

					for(ushort a = 0; a < rowset; a++)
					{
						arr = Build_ROW_Record((ushort)(row + a), (ushort)table.Columns.Count);
						fss.Write(arr, 0, arr.Length);
						offsetFirstRow += (uint)arr.Length;
						if(a != 0)
							cellBlocksOffsets[0] += (ushort)arr.Length;
					}

					for(int a = 0; a < rowset; row++, a++)
					{
						for(ushort col = 0; col < table.Columns.Count; col++)
						{
							if(row == 0)
								arr = Build_LABEL_Record(row, col, table.Columns[col].HeaderText);
							else
							{
								object obj = table[col, row - 1].Value;
								if(obj == null)
									obj = table[col, row - 1].FormattedValue;
								if(Convert.IsDBNull(obj))
									continue;
								switch((table.Columns[col].ValueType ?? typeof(string)).Name)
								{
									case "Byte": arr = Build_RK_Record(row, col, (Int32)(Byte)obj);
										break;
									case "SByte": arr = Build_RK_Record(row, col, (Int32)(SByte)obj);
										break;
									case "Int16": arr = Build_RK_Record(row, col, (Int32)(Int16)obj);
										break;
									case "UInt16": arr = Build_RK_Record(row, col, (Int32)(UInt16)obj);
										break;
									case "Int32": if((arr = Build_RK_Record(row, col, (Int32)obj)) == null)
											arr = Build_NUMBER_Record(row, col, (Double)(Int32)obj);
										break;
									case "UInt32": if((UInt32)obj <= 0x1FFFFFFF)
											arr = Build_RK_Record(row, col, (Int32)(UInt32)obj);
										else
											arr = Build_NUMBER_Record(row, col, (Double)(UInt32)obj);
										break;
									case "Int64": arr = Build_NUMBER_Record(row, col, (Double)(Int64)obj);
										break;
									case "UInt64": arr = Build_NUMBER_Record(row, col, (Double)(UInt64)obj);
										break;
									case "Decimal": //double val = (Double)(Decimal)obj;//Double.Parse(((Decimal)obj).ToString());
										if((arr = Build_RK_Record(row, col, (Double)(Decimal)obj)) == null)
											arr = Build_NUMBER_Record(row, col, (Double)(Decimal)obj);
										break;
									case "Single": double val = Double.Parse(((Single)obj).ToString());
										if((arr = Build_RK_Record(row, col, val)) == null)
											arr = Build_NUMBER_Record(row, col, val);
										break;
									case "Double": if((arr = Build_RK_Record(row, col, (Double)obj)) == null)
											arr = Build_NUMBER_Record(row, col, (Double)obj);
										break;
									//case "Boolean": arr = Build_BOOLERR_Record(row, col, (Boolean)obj);
									case "Boolean": arr = Build_LABEL_Record(row, col, obj == null ? "" : ((bool)obj ? "+" : "-"));
										break;
									case "String": arr = Build_LABEL_Record(row, col, obj == null ? "" : obj.ToString());
										break;
									case "DateTime": arr = Build_NUMBER_Record(row, col, (DateTime)obj);
										break;
									//default: throw new Exception(String.Format("“ип данных {0} не поддерживаетс¤ дл¤ экспорта!",
									//                             table.Columns[col].ValueType.FullName));
									default: arr = Build_LABEL_Record(row, col, obj == null ? "" : obj.ToString()); break;
								}
							}
							fss.Write(arr, 0, arr.Length);
							offsetFirstRow += (uint)arr.Length;
							if(a != 0)
							{
								if((cellBlocksOffsets[a] + arr.Length) <= ushort.MaxValue)
									cellBlocksOffsets[a] += (ushort)arr.Length;
								else
									cellBlocksOffsets[a] = 0;
							}
						}
					}
					arr = Build_DBCELL_Record(offsetFirstRow, cellBlocksOffsets);
					fss.Write(arr, 0, arr.Length);
					offsetFirstRow = 0;
				}
				#endregion «аписываем данные

				#region ƒописываем оставшиес¤ данные из потока
				while(true)
				{
					if((hr = stream.Read(w, 2, out len)) != 0 || len == 0)
						break;
					if(w == 0x000A)
					{
						fss.Write(w, 0, 2);

						if((hr = stream.Read(w, 2, out len)) != 0 || len == 0)
							throw new Exception(String.Format("ќшибка в записи, hr = {0}, len = {1}!", hr.ToString("X"), len));
						fss.Write(w, 0, 2);
						break;
					}
					fss.Write(w, 0, 2);
					if((hr = stream.Read(w, 2, out len)) != 0 || len == 0)
						throw new Exception(String.Format("ќшибка в записи, hr = {0}, len = {1}!", hr.ToString("X"), len));
					fss.Write(w, 0, 2);
					if(w > 0)
					{
						arr = new byte[w];
						if((hr = stream.Read(arr, w, out len)) != 0 || len == 0)
							throw new Exception(String.Format("ќшибка в записи, hr = {0}, len = {1}!", hr.ToString("X"), len));
						fss.Write(arr, 0, w);
					}
				}
				fss.Close();
				Marshal.ReleaseComObject(stream);
				stream = null;
				#endregion ƒописываем оставшиес¤ данные из потока

				#region «аписываем данные из временного файла
				fss = new FileStream(Environment.GetEnvironmentVariable("TEMP") + "\\excel_export.fe", FileMode.Open, FileAccess.Read);
				stg.CreateStream("Workbook", (uint)(
																						StorageModes.STGM_WRITE | StorageModes.STGM_DIRECT | StorageModes.STGM_SHARE_EXCLUSIVE |
																																		StorageModes.STGM_CREATE), 0, 0, out stream);
				hr = stream.SetSize((ulong)fss.Length);

				arr = new byte[32768];
				while(fss.Read(arr, 0, 32768) != 0)
					if((hr = stream.Write(arr, 32768, out len)) != 0 || len == 0)
						throw new Exception(String.Format("ќшибка при записи в выходной поток, hr = {0}, len = {1}!", hr.ToString("X"), len));
				#endregion «аписываем данные из временного файла
			}
			catch(Exception Err)
			{
				ErrorBox.Show(Err);
			}
			finally
			{
				if(fss != null)
					fss.Close();
				if(stream != null)
					Marshal.ReleaseComObject(stream);
				if(stg != null)
					Marshal.ReleaseComObject(stg);
				if(File.Exists(Environment.GetEnvironmentVariable("TEMP") + "\\excel_export.fe"))
					File.Delete(Environment.GetEnvironmentVariable("TEMP") + "\\excel_export.fe");
			}
		}
Beispiel #4
0
		//-------------------------------------------------------------------------------------
		/// <summary>
		/// ћетод экспорта данных в файл CSV.
		/// </summary>
		/// <param name="view">“аблица, содержаща¤ экспортируемые данные.</param>
		/// <param name="csvFile">‘айл csv, в который экспортируютс¤ данные.</param>
		public static void ExportToCsv(SimDataGridView view, string csvFile)
		{
			StreamWriter file = null;
			try
			{
				file = new StreamWriter(csvFile, false, Encoding.Default);

				StringBuilder sb = new StringBuilder(1000);
				foreach(DataGridViewColumn col in view.Columns)
					sb.AppendFormat("\"{0}\";", col.HeaderText.Replace("\"", "\"\""));
				file.WriteLine(sb.ToString());

				foreach(DataGridViewRow row in view.Rows)
				{
					StringBuilder cmdtext = new StringBuilder(1000);
					for(int col = 0; col < view.ColumnCount; col++) //DataGridViewColumn col in view.Columns) 
					{
						if(row.Cells[col].ValueType == typeof(string))
							cmdtext.AppendFormat("\"{0}\";", row.Cells[col].Value.ToString().Replace("\"", "\"\""));
						else
							cmdtext.AppendFormat("{0};", row.Cells[col].Value ?? row.Cells[col].FormattedValue);
					}
					file.WriteLine(cmdtext.ToString());
				}
			}
			catch(Exception Err)
			{
				ErrorBox.Show(Err);
			}
			finally
			{
				if(file != null)
					file.Close();
			}
		}
  //-------------------------------------------------------------------------------------
  #region << Methods >>
  private void Fill()
  {
   try
   {
    this.Controls.Clear();
    if(obj == null)
     return;
    this.SuspendLayout();

    //List<Tuple<PropertyDescriptor,int?>> list = new List<Tuple<PropertyDescriptor, int?>>();
    //foreach(PropertyDescriptor pd in TypeDescriptor.GetProperties(obj))
    // if(((showID && pd.Name == "OID") || pd.IsBrowsable) && 
    //    (typeFilter == null || typeFilter.Contains(pd.ComponentType)))
    // {
    //  DisplayOrderAttribute attr = pd.Attributes.OfType<DisplayOrderAttribute>().FirstOrDefault();
    //  list.Add(new Tuple<PropertyDescriptor, int?>(pd, attr == null ? null : (int?)attr.Order));
    // }
    //list.Sort(Sorter);

    if(IsTableView)
    {
     SimDataGridView grid = new SimDataGridView();
     List<ValuesPair<string, string>> viewList = new List<ValuesPair<string, string>>();

     foreach(PropertyDescriptor i in TypeDescriptor.GetProperties(obj))
     {
      if(!((showID && i.Name == "OID") || i.IsBrowsable))
       continue;
      if(typeFilter != null && typeFilter.Contains(i.ComponentType) == false)
       continue;
      ValuesPair<string, string> item = new ValuesPair<string, string>();
      item.Value1 = i.DisplayName;

      object val = i.GetValue(obj) ?? "(пусто)";
      if(val is DateTime)
      {
       DateTime d = (DateTime)val;
       if(d.TimeOfDay.Ticks == 0)
        item.Value2 = d.ToShortDateString();
       else
        item.Value2 = val.ToString();
      }
      else if(val is IList)
      {
       StringBuilder sb = new StringBuilder();
       for(int a = 0; a < ((IList)val).Count; a++)
       {
        sb.AppendFormat("{0}", i.Converter is ReferenceConverter ? (((IList)val)[a] ?? "").ToString() :
                                                           i.Converter.ConvertToString(((IList)val)[a]));
        if(!(((IList)val).Count < 2 || a == ((IList)val).Count -1))
         sb.AppendLine("");
       }
       if(sb.Length == 0)
        item.Value2 = "(пусто)";
       else
        item.Value2 = sb.ToString();
      }
      else if(i.Converter is ReferenceConverter)
       item.Value2 = (val ?? "").ToString();
      else
       item.Value2 = i.Converter.ConvertToString(val);
      viewList.Add(item);
     }
     grid.RowHeadersVisible = false;
     grid.BorderStyle = System.Windows.Forms.BorderStyle.None;
     grid.CellBorderStyle = DataGridViewCellBorderStyle.None;
     grid.RowTemplate.Height = 16;
     grid.ColumnHeadersVisible = false;
     grid.DefaultCellStyle.SelectionForeColor = grid.DefaultCellStyle.ForeColor;
     grid.Dock = DockStyle.Fill;
     grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
     grid.BackgroundColor = this.BackColor;
     grid.DefaultCellStyle.BackColor = this.BackColor;
     grid.DefaultCellStyle.SelectionBackColor = this.BackColor;
     grid.CellPainting += new DataGridViewCellPaintingEventHandler(grid_CellPainting);

     grid.DataSource = new ListBinder(viewList);
     grid.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCellsExceptHeader;
     this.Controls.Add(grid);
    }
    else
    {
     SimLayoutPanel p = new SimLayoutPanel() { AutoSizeMode = AutoSizeMode.GrowAndShrink, AutoSize = true };
     foreach(PropertyDescriptor i in TypeDescriptor.GetProperties(obj))
     {
      if(!((showID && i.Name == "OID") || i.IsBrowsable))
       continue;
      if(typeFilter != null && typeFilter.Contains(i.ComponentType) == false)
       continue;
      SimTwoLabel l = new SimTwoLabel();
      l.Label1Text = i.DisplayName + ":";
      l.Label1Image = global::Sim.Common.Properties.Resources.Point_x6;
      l.Label1Font = new Font(this.Font, FontStyle.Bold);
      l.Label1ForeColor = SystemColors.ControlDark;
      object val = i.GetValue(obj) ?? "(пусто)";
      if(val is DateTime)
       l.Label2Text = ((DateTime)val).TimeOfDay.Ticks == 0 ? ((DateTime)val).ToShortDateString() : val.ToString();
      else
       l.Label2Text = TypeDescriptor.GetConverter(val).ConvertToString(val);
      l.Margin = new Padding(0, 0, 6, 4);
      p.Controls.Add(l);
     }
     //p.BackColor = Color.Red;
     p.Dock = DockStyle.Top;
     this.Controls.Add(p);
    }

   }
   catch(Exception Err)
   {
    Sim.Controls.ModalErrorBox.Show(Err, this.FindModalContainer());
   }
   finally
   {
    this.PerformLayout();
    this.ResumeLayout();
   }
  }