You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何从DataGridView获取最大值并在图表上标记该最大值?

Solution: Find and Mark Maximum Value from DataGridView on Chart

Hey there! Nice job getting your data loaded into the DataGridView and plotted on the chart—you're already halfway there. Let's fix this problem of finding the maximum power value and highlighting it on your chart. Here's how to adjust your code, with explanations along the way:

Step 1: Fix the Open File Method (Small Cleanup)

First, I noticed your button1_openfile_Click method was missing a closing curly brace—let's fix that first to avoid compilation errors:

private void button1_openfile_Click(object sender, EventArgs e)
{
    string[] lines = File.ReadAllLines(@"C:\Users\Siti Nurhazwani\Desktop\table.txt");
    string[] values;
    for (int i = 0; i < lines.Length; i++)
    {
        values = lines[i].ToString().Split('/');
        string[] row = new string[values.Length];
        for (int j = 0; j < values.Length; j++)
        {
            row[j] = values[j].Trim();
        }
        table.Rows.Add(row);
    }
} // Added missing closing brace

Step 2: Modify the Visualize Button to Track and Mark the Maximum Value

Now, let's update your button2_visualize_Click method to find the maximum power value, then make it stand out on the chart. We'll track the max value as we load points, then customize that specific point's appearance:

private void button2_visualize_Click(object sender, EventArgs e)
{
    var chart = chart1.ChartAreas[0];
    chart.AxisX.IntervalType = DateTimeIntervalType.Number;
    chart.AxisX.LabelStyle.Format = "";
    chart.AxisY.LabelStyle.Format = "";
    chart.AxisX.LabelStyle.IsEndLabelVisible = true;

    // Clear old points first so we don't plot data multiple times
    chart1.Series["Signal"].Points.Clear();

    double maxPower = double.MinValue; // Start with the smallest possible double value
    int maxRowIndex = -1; // Track which row has the max value

    int rowcount = dataGridView1.RowCount - 1;
    double c1 = 0, c2 = 0;

    // Loop through all rows to load data AND find the max power
    for (int i = 0; i < rowcount; i++)
    {
        // Skip rows with null values to avoid conversion errors
        if (dataGridView1.Rows[i].Cells[0].Value == null || dataGridView1.Rows[i].Cells[1].Value == null)
            continue;

        c1 = Convert.ToDouble(dataGridView1.Rows[i].Cells[0].Value);
        c2 = Convert.ToDouble(dataGridView1.Rows[i].Cells[1].Value);

        // Update max value if current power is larger
        if (c2 > maxPower)
        {
            maxPower = c2;
            maxRowIndex = i;
        }

        // Add the current point to the chart series
        chart1.Series["Signal"].Points.AddXY(c1, c2);
    }

    // Now highlight the maximum value on the chart
    if (maxRowIndex != -1)
    {
        DataPoint maxPoint = chart1.Series["Signal"].Points[maxRowIndex];
        
        // Make the point stand out: red color, large circle marker
        maxPoint.Color = Color.Red;
        maxPoint.MarkerSize = 10;
        maxPoint.MarkerStyle = MarkerStyle.Circle;
        
        // Optional: Add a label showing the exact max value
        maxPoint.Label = $"Max: {maxPower:F2} mWs";
        maxPoint.LabelBackColor = Color.Yellow;
        maxPoint.LabelForeColor = Color.Black;
    }
}

Key Changes Explained:

  • Clear Old Points: chart1.Series["Signal"].Points.Clear() ensures you don't stack new data on top of old plots when clicking the visualize button multiple times.
  • Track Maximum Value: We initialize maxPower to the smallest possible double value, then update it whenever we find a larger power value in the DataGridView. We also track which row that value is in.
  • Null Check: Added a check to skip rows with null values—this prevents conversion errors if your text file has empty lines or incomplete data.
  • Highlight the Max Point: Once we know which point is the maximum, we customize its appearance (color, marker size) and add a label to make it instantly visible on the chart.

Extra Tips:

  • If your chart's series type is set to something like Column, the marker styling might not show up—switch to Line or Scatter if you want the marker to be visible.
  • If there are multiple rows with the same maximum power value, this code will only highlight the first one. To highlight all of them, you can collect all indices where c2 == maxPower and loop through them to apply the styling.

内容的提问来源于stack exchange,提问作者hycal99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 04:28:12