DataGridView 多選,必須包含滑鼠單擊和滑鼠拖拉兩種選擇方式,該 Row 第一次被選擇背景顏色須改為灰色、該 Row 再次被選擇則變回白色
namespace MultiSelected
{
public partial class MultiSelected : Form
{
public MultiSelected()
{
InitializeComponent();
}
private void MultiSelected_Load(object sender, EventArgs e)
{
// 建立 DataGridView 資料來源
DataTable dt = new DataTable();
dt.Columns.Add("ColEmpNO", typeof(int));
dt.Columns.Add("ColEmpName", typeof(string));
dt.Columns.Add("ColHireDate", typeof(DateTime));
dt.Rows.Add(1, "趙一", new DateTime(1963, 7, 7));
dt.Rows.Add(2, "洪二", new DateTime(1965, 5, 10));
dt.Rows.Add(3, "張三", new DateTime(1981, 12, 11));
dt.Rows.Add(4, "李四", new DateTime(1980, 1, 9));
dt.Rows.Add(5, "王五", new DateTime(1973, 9, 9));
if (dt.PrimaryKey.Length == 0) dt.Constraints.Add("PK", dt.Columns["colEmpNO"], true);
dgvData.DataSource = dt;
// DataGridView 設定
// DataGridView.MultiSelect = true 才可以在 DataGridView 中全選,此為預設值
dgvData.MultiSelect = true;
// 設定 DataGridView 為全選整個 Row
dgvData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
}
private void dgvData_MouseUp(object sender, MouseEventArgs e)
{
// 使用者選取的 row,透過 DataGridView.SelectedRows 找出
foreach (DataGridViewRow row in dgvData.SelectedRows)
{
// 利用 條件式等於 true ? 結果1 : 結果2 來顯示 row 背景顏色
row.DefaultCellStyle.BackColor = row.DefaultCellStyle.BackColor == Color.DarkGray ? Color.White : Color.DarkGray;
}
// 取消使用者選擇的 Row,這樣較容易觀察到 row 背景顏色變化,不會被 Highlight 遮住
// 下面兩種語法都可以達到該目的
dgvData.CurrentCell = null;
//dgvData.ClearSelection();
}
}
}
建議利用 CheckBox 讓使用者點選,會是一個比較簡單的 solution
- 參考資料
- 論壇問題出處
沒有留言:
張貼留言