色々試し中。
とりあえず、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に値を入れるとき、配列の配列でやるべきなのか多次元配列でやるべきなのか微妙。むー。

最近のコメント