1
通過rowspaned小區中所有受影響的行我有以下選擇上的DataGridView
我要的是,當我選擇BOX00099電池,三排右被選中。 此外,當我選擇這三行之一,其他兩行和BOX00099被選中。 所以,這個想法是將所有三行都視爲一行。
通過rowspaned小區中所有受影響的行我有以下選擇上的DataGridView
我要的是,當我選擇BOX00099電池,三排右被選中。 此外,當我選擇這三行之一,其他兩行和BOX00099被選中。 所以,這個想法是將所有三行都視爲一行。
我解決了這個問題,併爲那些誰可能有同樣的問題,因爲我,這就是我做的:
我用了一個擴展的datagridview而不是普通的一個。
public partial class DataGridViewEx : DataGridView
{
public DataGridViewEx()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
}
protected override void SetSelectedRowCore(int rowIndex, bool selected)
{
this.SuspendLayout();
base.SetSelectedRowCore(rowIndex, selected);
int index = rowIndex;
while (index < this.Rows.Count - 1 && this.Rows[index].Cells["BoxNo"].Value.ToString() == this.Rows[index + 1].Cells["BoxNo"].Value.ToString())
{
base.SetSelectedRowCore(index + 1, selected);
index = index + 1;
}
index = rowIndex;
while (index > 0 && this.Rows[index].Cells["BoxNo"].Value.ToString() == this.Rows[index - 1].Cells["BoxNo"].Value.ToString())
{
base.SetSelectedRowCore(index - 1, selected);
index = index - 1;
}
this.ResumeLayout();
}
}
然後我添加從this project列。該項目有一個演示,所以你有一個例子如何使用它。跨越一個小區,我用
var cell = (DataGridViewTextBoxCellEx)dataGridView1[0, index];
int nr = (int)dataGridView1.Rows[index].Cells["Nr"].Value;
cell.RowSpan = nr;
之後,從「3 spaned行」去到另一行與鍵上/下,我已經按上/下鈕3次(選擇每。排一個接一個地從「3 spaned行」爲了解決這個問題,我用它的按鍵事件如上:
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (dataGridView1.Rows.Count > 0)
{
int current = dataGridView1.CurrentRow.Index;
if (e.KeyData == Keys.Down)
{
e.Handled = true;
dataGridView1.SuspendLayout();
for (int i = current; i < dataGridView1.Rows.Count; i++)
{
if (dataGridView1.CurrentRow.Cells["BoxNo"].Value.ToString() != dataGridView1.Rows[i].Cells["BoxNo"].Value.ToString())
{
dataGridView1.CurrentCell = dataGridView1.Rows[i].Cells["BoxNo"];
break;
}
}
dataGridView1.ResumeLayout();
}
else if (e.KeyData == Keys.Up)
{
e.Handled = true;
dataGridView1.SuspendLayout();
for (int i = current; i >= 0; i--)
{
if (dataGridView1.CurrentRow.Cells["BoxNo"].Value.ToString() != dataGridView1.Rows[i].Cells["BoxNo"].Value.ToString())
{
dataGridView1.CurrentCell = dataGridView1.Rows[i].Cells["BoxNo"];
break;
}
}
dataGridView1.ResumeLayout();
}
}
}
顯示實際的代碼 – Max
這是一個Windows窗體應用程序,這並不重要我怎麼填充datagridview,這只是在SelectionChange事件中的技巧。 – Adnand
[閱讀本文](https://stackoverflow.com/help/mcve) – Max