需要使用绑定源设置datagridview数据源

bt1cpqcv  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(412)

我使用的是高级datagridview,要使用它附带的过滤器,您需要使用绑定源。我正在编写一个oracle查询(实际上是其中的几个),并将结果用作数据源。我似乎无法使它正常工作。我在google上搜索了所有的解决方案,都试过了,但都没有成功。
我的代码:

  1. public partial class frmMain : Form
  2. {
  3. private string sql;
  4. public DataGridView DVG = new DataGridView();
  5. public BindingSource bs = new BindingSource();
  6. private static string connectionString = "User Id=;Password=;" +
  7. "Data Source=:1521/;Pooling=false;";
  8. private void cmdtb1pg1_Click(object sender, EventArgs e)
  9. {
  10. // Get Analysis
  11. sql = "SELECT DISTINCT NAME FROM LWPROD.ANALYSIS ORDER BY 1";
  12. bs.DataSource = GetData(sql, dgAnalysis);
  13. dgAnalysis.ClearSelection();
  14. }
  15. private BindingSource GetData(string sql, DataGridView DGV)
  16. {
  17. DataTable table = new DataTable();
  18. OracleConnection con = new OracleConnection(connectionString);
  19. BindingSource bs = new BindingSource();
  20. try
  21. {
  22. DataSet ds = new DataSet();
  23. OracleCommand cmd = new OracleCommand();
  24. con.Open();
  25. OracleDataAdapter da = new OracleDataAdapter();
  26. da.Fill(ds, connectionString);
  27. bs.DataSource = da;
  28. return bs;
  29. }
  30. catch
  31. {
  32. return bs;
  33. }
  34. finally
  35. {
  36. var name = DGV.Name;
  37. switch (name)
  38. {
  39. case "dgAnalysis":
  40. dgAnalysis.DataSource = bs;
  41. break;
  42. case "dgComponents":
  43. dgComponents.DataSource = bs;
  44. break;
  45. }
  46. }
  47. }
ac1kyiln

ac1kyiln1#

下面是一些更新的代码。这仍然不起作用。在这次尝试中。

  1. 1. ` bs.DataSource = GetData(sql, dgAnalysis);` is stating that cannot implicitly convert type void to object.
  2. 2. ` bs = new BindingSource(ds, DGV); ` is stating that Argument 2 cannot convert from ADGV,AdvancedDataGridView to string. DGV is a variable that contains the name of the datagridview being worked with. See 1. it's working with dgAnalysis, later it's working with dgComponents. I have multiple other datagridview to fill.
  3. private void cmdtb1pg1_Click(object sender, EventArgs e)
  4. {
  5. // Get Analysis
  6. sql = "SELECT DISTINCT NAME FROM LWPROD.ANALYSIS ORDER BY 1";
  7. bs.DataSource = GetData(sql, dgAnalysis);
  8. dgAnalysis.ClearSelection();
  9. }
  10. private void GetData(string sql, AdvancedDataGridView DGV)
  11. {
  12. OracleConnection con = new OracleConnection(connectionString);
  13. OracleDataAdapter table = new OracleDataAdapter();
  14. try
  15. {
  16. DataSet ds = new DataSet();
  17. OracleCommand cmd = new OracleCommand();
  18. con.Open();
  19. OracleDataAdapter da = new OracleDataAdapter();
  20. bs = new BindingSource(ds, DGV);
  21. }
  22. catch
  23. {
  24. }
  25. finally
  26. {
  27. var name = DGV.Name;
  28. switch (name)
  29. {
  30. case "dgAnalysis":
  31. dgAnalysis.DataSource = bs;
  32. break;
  33. case "dgComponents":
  34. dgComponents.DataSource = bs;
  35. break;
  36. }
  37. }
  38. } `
展开查看全部
pzfprimi

pzfprimi2#

我有一部分工作要做,我可以将值放入dganalysis,过滤它们,并使用作为第二个查询的参数。在运行第二个查询之后,第一个datagridview将包含3列而不是一列。第二个datagrid视图将包含3行而不是2行,并且查询的解析没有填充第二个查询。
第一次跑步:第一次跑步
第二轮:第二轮
以下是更新的代码:

  1. using System;
  2. using System.Data;
  3. using System.Windows.Forms;
  4. using Oracle.ManagedDataAccess.Client;
  5. using ADGV;
  6. namespace Stored_Query_3
  7. {
  8. public partial class frmMain : Form
  9. {
  10. private string sql;
  11. private static string namedgAnalysis;
  12. private string namedgComponents;
  13. //private string name;
  14. //private string name;
  15. public AdvancedDataGridView DVG = new AdvancedDataGridView();
  16. private string DVGcomponent;
  17. BindingSource bs;
  18. DataTable dt = new DataTable();
  19. private static string connString = ";Password=;" +
  20. "Data Source=:1521/;Pooling=false;";
  21. public frmMain()
  22. {
  23. InitializeComponent();
  24. }
  25. private void componentsByAnalysisToolStripMenuItem_Click(object sender, EventArgs e)
  26. {
  27. //select correct tab
  28. var caseSwitch = (sender as ToolStripMenuItem).Text;
  29. switch (caseSwitch)
  30. {
  31. case "Components By Analysis":
  32. //switch to tab
  33. this.tab1.SelectedTab = this.tabpg1;
  34. break;
  35. default:
  36. //nothing
  37. break;
  38. }
  39. }
  40. private void cmdtb1pg1_Click(object sender, EventArgs e)
  41. {
  42. bs.Clear();
  43. // Get Analysis
  44. sql = "SELECT DISTINCT NAME FROM LWPROD.ANALYSIS ORDER BY 1";
  45. bs.DataSource = typeof(AdvancedDataGridView);
  46. GetData(sql, "namedgAnalysis", dgAnalysis);
  47. dgAnalysis.ClearSelection();
  48. }
  49. private void dgAnalysis_FilterStringChanged(object sender, EventArgs e)
  50. {
  51. this.bs.Filter = this.dgAnalysis.FilterString;
  52. }
  53. private void dgAnalysis_SortStringChanged(object sender, EventArgs e)
  54. {
  55. this.bs.Sort = this.dgAnalysis.SortString;
  56. }
  57. private void dgAnalysis_CellClick(object sender, DataGridViewCellEventArgs e)
  58. {
  59. try
  60. {
  61. if (dgAnalysis.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null)
  62. {
  63. //Add to listbox
  64. lstAnalysis.Items.Add(dgAnalysis.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
  65. }
  66. }
  67. catch
  68. {
  69. }
  70. }
  71. private void cmdDeleteFromList_Click(object sender, EventArgs e)
  72. {
  73. while (lstAnalysis.SelectedItems.Count > 0)
  74. {
  75. lstAnalysis.Items.Remove(lstAnalysis.SelectedItems[0]);
  76. }
  77. }
  78. private void cmd2tb1pg1_Click(object sender, EventArgs e)
  79. {
  80. string ana = "";
  81. foreach (string item in lstAnalysis.Items)
  82. {
  83. ana += "'" + item.ToString() + "',";
  84. }
  85. //Clean up list itens
  86. ana = ana.Remove(ana.Length - 1, 1);
  87. sql = "";
  88. sql = sql + "SELECT DISTINCT LWPROD.COMPONENT.NAME AS Component_Name,";
  89. sql = sql + " LWPROD.ANALYSIS.NAME AS Analysis_Name";
  90. sql = sql + " FROM LWPROD.COMPONENT";
  91. sql = sql + " INNER JOIN LWPROD.ANALYSIS ON ANALYSIS.NAME = COMPONENT.ANALYSIS";
  92. sql = sql + " WHERE ANALYSIS.NAME IN (" + ana + ")";
  93. sql = sql + " ORDER BY ANALYSIS.NAME,COMPONENT.NAME";
  94. bs.DataSource = typeof(AdvancedDataGridView);
  95. GetData(sql, "namedgComponents", dgComponents);
  96. dgComponents.ScrollBars = ScrollBars.Both;
  97. dgComponents.ClearSelection();
  98. }
  99. private void GetData(string sql, string name, AdvancedDataGridView Name)
  100. {
  101. //clear up string name
  102. name = name.Remove(0, 4);
  103. name = name.Trim();
  104. try
  105. {
  106. //oracle connection object
  107. using (OracleConnection conn = new OracleConnection(connString))
  108. {
  109. //retrieve the SQL Server instance version
  110. sql = sql; // "SELECT DISTINCT NAME FROM LWPROD.ANALYSIS ORDER BY 1";
  111. OracleCommand cmd = new OracleCommand(sql, conn);
  112. //Set the SqlDataAdapter object
  113. OracleDataAdapter dAdapter = new OracleDataAdapter(cmd);
  114. //fill dataset with query results
  115. dAdapter.Fill(dt);
  116. bs.DataSource = dt;
  117. //close connection
  118. conn.Close();
  119. }
  120. }
  121. catch (Exception ex)
  122. {
  123. //display error message
  124. MessageBox.Show("Exception: " + ex.Message);
  125. }
  126. finally
  127. {
  128. switch (name)
  129. {
  130. case "dgAnalysis":
  131. //set DataGridView control to read-only
  132. dgAnalysis.ReadOnly = true;
  133. //set the DataGridView control's data source/data table
  134. dgAnalysis.DataSource = bs;
  135. break;
  136. case "dgComponents":
  137. //set DataGridView control to read-only
  138. dgComponents.ReadOnly = true;
  139. //set the DataGridView control's data source/data table
  140. dgComponents.DataSource = bs;
  141. break;
  142. default:
  143. MessageBox.Show("Something Went Wrong");
  144. break;
  145. }
  146. }
  147. }
  148. }
  149. }

我不知道如何清除数据源和数据网格?我有tried:clearing the bindingsource并重置datagridview的数据源。

展开查看全部

相关问题