JsonDataSourceConnectionEditor.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. using FastReport.Data.JsonConnection;
  2. using FastReport.Forms;
  3. using FastReport.Utils;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. namespace FastReport.Data.ConnectionEditors
  9. {
  10. /// <summary>
  11. ///
  12. /// </summary>
  13. public partial class JsonDataSourceConnectionEditor : ConnectionEditorBase
  14. {
  15. #region Internal Properties
  16. internal string JsonSchema
  17. {
  18. get
  19. {
  20. return tbJsonSchema.Text;
  21. }
  22. set
  23. {
  24. tbJsonSchema.Text = value;
  25. }
  26. }
  27. private string lastJson;
  28. internal bool IsJsonChanged
  29. {
  30. get
  31. {
  32. return lastJson != tbJson.Text;
  33. }
  34. set
  35. {
  36. if (value)
  37. {
  38. lastJson = tbJson.Text;
  39. }
  40. else
  41. {
  42. lastJson = null;
  43. }
  44. }
  45. }
  46. #endregion Internal Properties
  47. #region Public Constructors
  48. /// <summary>
  49. /// Initialize a new instance
  50. /// </summary>
  51. public JsonDataSourceConnectionEditor()
  52. {
  53. InitializeComponent();
  54. Localize();
  55. }
  56. #endregion Public Constructors
  57. #region Protected Methods
  58. /// <summary>
  59. ///
  60. /// </summary>
  61. /// <returns></returns>
  62. protected override string GetConnectionString()
  63. {
  64. JsonDataSourceConnectionStringBuilder builder = new JsonDataSourceConnectionStringBuilder();
  65. builder.Json = tbJson.Text;
  66. builder.JsonSchema = tbJsonSchema.Text;
  67. //foreach (DataGridViewRow row in dgvHeaders.Rows)
  68. //{
  69. // if (row.Cells[0].Value != null && row.Cells[1].Value != null)
  70. // {
  71. // var headerName = row.Cells[0].Value.ToString();
  72. // var headerData = row.Cells[1].Value.ToString();
  73. // builder.Headers.Add(headerName, headerData);
  74. // }
  75. //}
  76. Dictionary<string, string> headers = new Dictionary<string, string>();
  77. for (int i = 0; i < dgvHeaders.Rows.Count; i++)
  78. {
  79. DataGridViewRow row = dgvHeaders.Rows[i];
  80. if (row?.Cells[0].Value != null && row?.Cells[1].Value != null)
  81. {
  82. var headerName = row.Cells[0].Value.ToString();
  83. var headerData = row.Cells[1].Value.ToString();
  84. headers.Add(headerName, headerData);
  85. }
  86. }
  87. builder.Headers = headers;
  88. if (cbEnconding.SelectedItem is MyEncodingInfo)
  89. {
  90. builder.Encoding = (cbEnconding.SelectedItem as MyEncodingInfo).Name;
  91. }
  92. else
  93. {
  94. builder.Encoding = Encoding.UTF8.WebName;
  95. }
  96. builder.SimpleStructure = cbSimpleStructure.Checked;
  97. return builder.ToString();
  98. }
  99. /// <summary>
  100. ///
  101. /// </summary>
  102. /// <param name="value"></param>
  103. protected override void SetConnectionString(string value)
  104. {
  105. JsonDataSourceConnectionStringBuilder builder = new JsonDataSourceConnectionStringBuilder(value);
  106. tbJson.Text = builder.Json;
  107. tbJsonSchema.Text = builder.JsonSchema;
  108. string encoding = builder.Encoding;
  109. foreach (KeyValuePair<string, string> header in builder.Headers)
  110. {
  111. dgvHeaders.Rows.Add(header.Key, header.Value);
  112. }
  113. int i = 0;
  114. foreach (object item in cbEnconding.Items)
  115. {
  116. if (item is MyEncodingInfo)
  117. if ((item as MyEncodingInfo).Name == encoding)
  118. {
  119. cbEnconding.SelectedIndex = i;
  120. break;
  121. }
  122. i++;
  123. }
  124. if (i >= cbEnconding.Items.Count)
  125. {
  126. cbEnconding.SelectedIndex = 0;
  127. }
  128. lastJson = tbJson.Text;
  129. cbSimpleStructure.Checked = builder.SimpleStructure;
  130. }
  131. #endregion Protected Methods
  132. #region Private Methods
  133. private void BtnJson_Click(object sender, EventArgs e)
  134. {
  135. JsonEditorForm form = new JsonEditorForm();
  136. form.JsonText = tbJson.Text;
  137. if (form.ShowDialog() == DialogResult.OK)
  138. {
  139. tbJson.Text = form.JsonText;
  140. }
  141. }
  142. private void BtnJsonSchema_Click(object sender, EventArgs e)
  143. {
  144. JsonEditorForm form = new JsonEditorForm();
  145. form.JsonText = tbJsonSchema.Text;
  146. if (form.ShowDialog() == DialogResult.OK)
  147. {
  148. tbJsonSchema.Text = form.JsonText;
  149. }
  150. }
  151. private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
  152. {
  153. if (cbEnconding.SelectedIndex > 0 && !(cbEnconding.SelectedItem is MyEncodingInfo))
  154. {
  155. cbEnconding.SelectedIndex = 0;
  156. }
  157. }
  158. private void Localize()
  159. {
  160. gbConnection.Text = Res.Get("ConnectionEditors,Json,Settings");
  161. cbEnconding.Items.Clear();
  162. cbEnconding.Items.Add(new MyEncodingInfo(Encoding.UTF8));
  163. cbEnconding.SelectedIndex = 0;
  164. cbEnconding.Items.Add(new MyEncodingInfo(Encoding.ASCII));
  165. cbEnconding.Items.Add(new MyEncodingInfo(Encoding.Unicode));
  166. cbEnconding.Items.Add(new MyEncodingInfo(Encoding.BigEndianUnicode));
  167. cbEnconding.Items.Add(new MyEncodingInfo(Encoding.UTF7));
  168. cbEnconding.Items.Add(new MyEncodingInfo(Encoding.UTF32));
  169. cbEnconding.Items.Add("—————");
  170. foreach (MyEncodingInfo info in MyEncodingInfo.GetEncodings())
  171. {
  172. cbEnconding.Items.Add(info);
  173. }
  174. lbEncoding.Text = Res.Get("ConnectionEditors,Json,Encoding");
  175. lbJson.Text = Res.Get("ConnectionEditors,Json,Input");
  176. lbJsonSchema.Text = Res.Get("ConnectionEditors,Json,Schema");
  177. lbHeaders.Text = Res.Get("ConnectionEditors,Json,RequestHeaders");
  178. dgvHeaders.Columns[0].HeaderText = Res.Get("ConnectionEditors,Json,HeaderKey");
  179. dgvHeaders.Columns[1].HeaderText = Res.Get("ConnectionEditors,Json,HeaderVal");
  180. cbSimpleStructure.Text = Res.Get("ConnectionEditors,Json,SimpleStructure");
  181. }
  182. #endregion Private Methods
  183. }
  184. }