Archive for 5月 27th, 2009

C# で DataGridView をいじる

水曜日, 5月 27th, 2009 | Author:

色々試し中。

とりあえず、5列あるDataGridViewを作っておいて、一番右の列だけ ColumnType を DataGridViewButtonColumn にしておく。
でもって以下のようなコードでテスト。

[csharp]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
string[] a;
string[] b;
string[] c;

a = new string[] { "A", "B", "C", "D", "E"};
b = new string[] { "F", "G", "H", "I", "J" };
c = new string[] { "K", "L", "M", "N", "O" };

dataGridView1.Rows.Add(a);
dataGridView1.Rows.Add(b);
dataGridView1.Rows.Add(c);
}

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
int X = dataGridView1.CurrentCellAddress.X;
int Y = dataGridView1.CurrentCellAddress.Y;
string tmp = dataGridView1[X-2, Y].Value.ToString();
MessageBox.Show(tmp);
}
}
}
[/csharp]

これで、一番右の列のボタンになったところを押すと、その二つ左にあるセルの内容が取得できたのでにんまり。

ボタン列が微妙な気もしてきたので、列のどこをクリックしても良いようにしてみたのがこちら。ついでに、どこをクリックされても当該行B列の内容を取得するようにしてみた。あと、新規行の追加と既存行の削除とセルの編集を禁止。

[csharp]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
string[] a;
string[] b;
string[] c;

a = new string[] { "A", "B", "C", "D", "E"};
b = new string[] { "F", "G", "H", "I", "J" };
c = new string[] { "K", "L", "M", "N", "O" };

dataGridView1.Rows.Add(a);
dataGridView1.Rows.Add(b);
dataGridView1.Rows.Add(c);
dataGridView1.AllowUserToAddRows = false;
dataGridView1.AllowUserToDeleteRows = false;
dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;
}

private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
DataGridView.HitTestInfo hti;
hti = dataGridView1.HitTest(e.X, e.Y);
int X = hti.ColumnIndex;
int Y = hti.RowIndex;
string tmp = "";
if (hti.Type == System.Windows.Forms.DataGridViewHitTestType.Cell || hti.Type == System.Windows.Forms.DataGridViewHitTestType.RowHeader)
{
tmp = dataGridView1[1, Y].Value.ToString();
MessageBox.Show(tmp);
}
}
}
}
[/csharp]

で、結局DataGridViewに値を入れるとき、配列の配列でやるべきなのか多次元配列でやるべきなのか微妙。むー。

Category: 日記  | Tags: ,  | Leave a Comment