[英]Chart only visible rows in datagridview
我正在嘗試只繪制datagridview中的可見行。 原因是因為datagridviewer已經按日期排序,而我只需要這些值。 其他行的值和編碼為.Visible = false。 下面是顯示圖表並繪制X和Y值的代碼。 我曾嘗試使用RowsVisible方法,但一無所獲。
if (CK_QA_DataDataGridView.Rows.Count == 0)
{
MessageBox.Show("Select Date Range and Show Results Before Chart");
}
else
{
chart5.Visible = true;
InitialChart.Visible = false;
chart5.DataSource = CK_QA_DataDataGridView.DataSource;
this.chart5.Series["X error"].XValueMember = CK_QA_DataDataGridView.Columns[0].DataPropertyName;
this.chart5.Series["Y error"].YValueMembers = CK_QA_DataDataGridView.Columns[13].DataPropertyName;
chart5.DataBind();
}
可能有很多方法可以做到這一點,但是我懷疑您是否可以使DataSource
直接查看DGV行的可見性。
因此,最佳解決方案取決於如何確定可見性。
如果通過評估某些數據,則可以通過使用基於具有Filter
的相同DataTable
的DataView
來成功。
但是,如果用戶可以隨意使DGV行不可見,則必須為Chart
創建一個單獨的DataSource
。
這是一個完整但最小的示例。
我創建一個表來首先填充DGV:
DataTable DT2 = null;
private void button16_Click(object sender, EventArgs e)
{
DT2 = new DataTable("Artists");
DT2.Columns.Add("Name", typeof(string));
DT2.Columns.Add("Age", typeof(int));
DT2.Columns.Add("Score", typeof(int));
DT2.Rows.Add("Animals", 33, 17);
DT2.Rows.Add("Band", 45, 9);
DT2.Rows.Add("Cream", 43, 26);
DT2.Rows.Add("Doors", 50, 21);
dataGridView1.DataSource = DT2;
}
然后,我編寫一個NumericUpDown
來模擬可見性的條件:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
int limit = (int)numericUpDown1.Value;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
var dbo = (DataRowView)row.DataBoundItem;
row.Visible = (int)dbo[2] >= limit; //check for current row missing!
}
}
最后,我基於原始DataTable
的Rows和每個DGV行的Visible
屬性創建一個DataSource
:
private void button17_Click(object sender, EventArgs e)
{
List<DataRowView> rows2show = new List<DataRowView>();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
var dbo = (DataRowView)row.DataBoundItem;
if (row.Visible) rows2show.Add(dbo);
}
chart5.Series[0].Points.DataBind(rows2show, "Name", "Score", "");
}
請注意 ,您無法隱藏當前行。 為了安全起見,您可能需要使用此替代方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.