簡體   English   中英

僅繪制datagridview中的可見行

[英]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的相同DataTableDataView來成功。

但是,如果用戶可以隨意使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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM