【问题标题】:How to compare DataTables created during runtime?如何比较运行时创建的 DataTables?
【发布时间】:2020-06-29 15:59:39
【问题描述】:

我是编程新手,到目前为止我所做的一切都是为了满足我的需求进行研究和实施......

目前我正在创建这样的数据表:

private void GridOfBitmaps()
        {
            Bitmap OriginBitmap = new Bitmap(pictureBox1.Image);
            DataTable LightnessTable = new DataTable("Lightness");

            for (int x = 0; x < pictureBox1.Width-20; x+= 20)
            {
                LightnessTable.Columns.Add("C" + x, typeof(string));
                for (int y = 0; y < pictureBox1.Height-20; y += 20)
                {
                    RectangleF smallRect = new RectangleF(x, y, 20, 20);
                    System.Drawing.Imaging.PixelFormat format =
                        OriginBitmap.PixelFormat;
                    Bitmap cloneBitmap = OriginBitmap.Clone(smallRect, format);
                    string avgLightness = Convert.ToString(CalculateAverageLightness(cloneBitmap));

                    int index = avgLightness.IndexOf(",");
                    if (index > 0)
                        avgLightness = avgLightness.Substring(0, index);

                    if (x <= 0)
                    {
                        DataRow row = LightnessTable.NewRow();
                        row["C" + x] = avgLightness;
                        LightnessTable.Rows.Add(row);
                    }
                    else
                    {
                        LightnessTable.Rows[y / 20]["C" + x] = avgLightness;
                    }
                }
            }

这个函数被签名到按钮,所以每次点击我都会得到新的数据表。

DataTable 行包含 0 到 255(字符串)范围内的值,我希望能够比较以这种方式创建的 2 个数据表(逐个单元格以确定值是否更高)。

编辑#: 问题:如何在程序运行期间存储这些数据表,以便以后进行比较?

我无法使用数据库。谢谢!

【问题讨论】:

  • stackoverflow.com/questions/9022118/… 您需要访问每个单元格并进行比较。
  • 我想我问错了...我会编辑问题
  • 如果你放两个样本数据表数据并描述你想要的输出会更好。
  • 谢谢 Luis,我刚刚更新了。它是关于存储数据表以备后用。我不知道没有数据库怎么办
  • 你想传递你的LightnessTable吗?有什么阻止您将void GridOfBitmaps() 更改为DataTable GridOfBitmaps()?调用函数后,您可能会获得此数据表。例如DataTable first = GridOfBitmaps().

标签: c# winforms datatable


【解决方案1】:
  1. 你只有一个功能。
  2. 多次调用此函数后,您需要保存两个或多个结果。

最通用的方法是将它们保存在您的私人成员中。

首先,把你的签名改成DataTable GridOfBitmaps()

DataTable GridOfBitmaps()
{
    Bitmap OriginBitmap = new Bitmap(pictureBox1.Image);
    DataTable LightnessTable = new DataTable("Lightness");

    // Your implementation here, omitted

    return LightnessTable;
}

其次,调用函数后,将其保存在你的成员变量中

public partial class YourFormClass : Form
{
    List<DataTable> m_results = new List<DataTable>();
    void button_Click( object sender, EventArgs e )
    {
         DataTable result = GridOfBitmaps();
         m_results.Add( result );
    }
}

两次或多次点击后,您需要按比较按钮进行比较

void buttonCompare_Click( object sender, EventArgs e )
    {
         if( m_results.Count < 2 ){
             return;
         }
         DataTable first = m_results[ 0 ];
         DataTable second = m_results[ 1 ];
         // compare implementation.

         // compare finished. clear your results.
         m_results.Clear();
    }

【讨论】:

  • List m_results = new List;这是缺少一些 () 或 [] 或 {} 的错误?
  • 应该是(),不好意思错过了。已编辑
猜你喜欢
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
相关资源
最近更新 更多