7

このタイプのグラフを datagridviewcontrol に追加したい:-

代替テキスト

ここで、グラフは 12 か月間プロットされ、12 か月間のパーセンテージまたはピクセル単位の比較値を入力できます....グラフに色を付ける方法も教えてください。

これを行うためのアイデアは高く評価されます

編集----多くのことを学んだすべての回答に感謝しますが、それでも問題を回避できませんでした...

  1. 約15列のdatagridviewに多くの行を表示する必要があります....行を直接追加するのは非常に奇妙ですが、行を追加するたびにグラフに異なる列を追加します...何も考えられませんでしたこれを達成する他の方法....さらに、画像をグリッドビューに直接追加する場合に必要な画像を保存したくない.....

  2. チャートでカスタムデータグリッドビューを取得するのに役立つサードパーティツールはありますか

ありがとうございました 。

4

5 に答える 5

1

はるかに簡単でシンプルなgoogle charts APIを使用してください。

DataGridView の下<img>で、特定の のタグを持つテンプレートを再帰するだけsrcです。

たとえば、次のコード (2 行に分かれています):

<img src="http://chart.apis.google.com/chart?
   cht=bvs&chd=t:50,20,30,65,20&chs=220x30" width="120" />

次のようになります。

t:50,20,30,65,20バインド先のデータに応じて、セクションをわずかに変更する必要があります。

このような:

<img src="http://chart.apis.google.com/chart?
   cht=bvs&chd=t:<%# Eval("t1") %>,<%# Eval("t2") %>,<%# Eval("t3") %>,<%# Eval("t4") %>,<%# Eval("t5") %>&chs=220x30" width="120" />
于 2010-11-23T23:58:33.760 に答える
0

その特定の列にDataGridViewImageColumn()を使用してみることができます。

http://msdn.microsoft.com/en-us/library/z1cc356h%28v=VS.90%29.aspxを参照してください

グラフの場合、最初にビットマップを作成する必要があります。msdnで「コード:実行時のビットマップの作成(Visual C#)」を検索すると、簡単ですが効果的な例が見つかります。(まだ2つのリンクを投稿できません)

基本的に、画像のように扱われる列を追加してから、cellformattingイベントを介して画像をペイントする必要があります。事前に画像を作成してキャッシュすることも、その場で画像を作成することもできます(好み)。2番目の記事は、小さなグラフを作成するのに役立つはずです。

色を変更するには、setpointメソッドの3番目の引数を変更する必要があります。確かに、それはチャートを描くための最速の方法ではありませんが、最初から始めるのに十分簡単です。

于 2010-10-24T13:22:56.763 に答える
0

コントロールのメモリ要件とパフォーマンスをテストできるように、短いコード例を次に示します。ビットマップを回避するために何をすべきかわかりませんが、ほとんどのサードパーティのコントロールは同様の方法で機能すると思います。私のコードはいくつかの方法で最適化できると確信していますが、最初にいくつかの方法があります。いつグリッドに 20000 行が必要になるかはわかりませんが、ユーザーはそれをすべて見ることはできません。おそらく、一度にサブセットを表示する方法を見つけることができます..?

イメージの作成は、おそらくテスト オブジェクト (データ モデルであるため) ではなく、プレゼンテーション レイヤーで行う必要があります (これは同様の目的で使用できるため、DataBindingComplete イベントを追加しました)。簡単でした。画像はファイルなどに保存されません。

dataGridView1 という DataGridView を使用してフォームを作成しました。

これはフォームのコードです:

List<TestObject> _list = new List<TestObject>();

    public Form1()
    {
        InitializeComponent();
        dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

    }


    void dataGridView1_DataBindingComplete( object sender, DataGridViewBindingCompleteEventArgs e )
    {

    }

    private void Form1_Load( object sender, EventArgs e )
    {
        // Populate the grid, here you should add as many rows as you want to display
        _list.Add(new TestObject("Obj1", 20, Brushes.Red, new int[]{3,4,5,3,5,6}));
        _list.Add(new TestObject("Obj2", 10, Brushes.Green, new int[] { 1, 2, 3, 4, 5, 6 }));
        _list.Add(new TestObject("Obj3", 30, Brushes.Blue, new int[] { 3, 2, 1, 1, 2, 3 }));


        dataGridView1.DataSource = _list;

    }

また、グリッドを設定するためのテスト オブジェクトも作成しました。

public class TestObject
    {

        private const int BitmapWidth = 100;
        private const int BitmapHeight = 20;
        private System.Drawing.Brush _color;
        private string _name;
        private int[] _numbers;
        private int _value;


        public TestObject( string name, int value, System.Drawing.Brush color, int[] series )
        {
            _name = name;
            _numbers = series;
            _color = color;
            _value = value;
        }

        public string Name
        {
            get { return _name; }
        }
        public string Value { get { return _value.ToString(); } }

        public Image Series
        {
            get
            {
                int width = BitmapWidth / _numbers.Length - _numbers.Length;

                System.Drawing.Bitmap b = new Bitmap(BitmapWidth, BitmapHeight);
                Graphics g = Graphics.FromImage(b);
                g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;

                int current = 0;

                for (int i = 0;i < _numbers.Length;i++)
                {
                    g.FillRectangle(_color, current, BitmapHeight - (BitmapHeight / 10) * _numbers[i], width, (BitmapHeight / 10) * _numbers[i]);
                    current+=width + 2;
                }

                return b;
            }
        }
    }
于 2010-10-26T17:03:26.977 に答える
0

チャート コントロールを使用してみてください: http://msdn.microsoft.com/en-us/library/dd456632.aspx

于 2010-10-22T15:59:10.563 に答える
0

パネル(div)を使用する方法は次のとおりです。

http://weblogs.asp.net/stevewellens/archive/2010/03/01/visual-data-binding-hot-dang.aspx

于 2010-10-26T20:42:52.963 に答える