代碼如下for (int i = 0; i < dataGridView1.Columns.Count;i++ )
{
this.dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
}
for (int i = 0; i < dataGridView1.Rows.Count-1;i++ )
{
dataGridView1.ClearSelection();
string sqlX = string.Empty;
sqlX += "SELECT enable FROM XITEM WHERE LEFT(HOKAN,2)='BS' and code='" + dataGridView1.Rows[i].Cells["專案編碼"].Value.ToString() + "'";
string sql = Program.SqlCommandExecuteScalarReturnString1(sqlX);
{
if (sql == "0")
{
dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.LightGray;
}
}
}
點擊排序過后,背景色不會保留,所以添加了兩行代碼
for (int i = 0; i < dataGridView1.Columns.Count;i++ )
{
this.dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
}
禁止了排序功能,現在希望打開排序功能,同時排序后能保留背景色,如何修改
uj5u.com熱心網友回復:
public class MyDataGridView: DataGridView
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.C | Keys.Control))
{
StringBuilder builder = new StringBuilder();
DataGridViewRow lastRow = this.SelectedRows.Cast<DataGridViewRow>().Last();
foreach (DataGridViewRow row in this.SelectedRows)
{
if(row.DefaultCellStyle.BackColor == Color.LightGray)
{
continue;
}
DataGridViewCell lastCell = row.Cells.Cast<DataGridViewCell>().Last();
foreach (DataGridViewCell cell in row.Cells)
{
builder.Append(cell.Value.ToString());
if (cell != lastCell)
{
builder.Append("\t");
}
}
if (row != lastRow)
{
builder.AppendLine();
}
}
Clipboard.SetText(builder.ToString());
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
public override void Sort(DataGridViewColumn dataGridViewColumn, ListSortDirection direction)
{
List<object> datas = this.Rows.Cast<DataGridViewRow>().Where(row => row.DefaultCellStyle.BackColor == Color.LightGray).Select(row => row.DataBoundItem).ToList();
base.Sort(dataGridViewColumn, direction);
this.Rows.Cast<DataGridViewRow>().Where(row=>datas.Contains(row.DataBoundItem)).ToList().ForEach(row => row.DefaultCellStyle.BackColor = Color.LightGray);
}
}
升級一下這個自定義類…
uj5u.com熱心網友回復:
哈哈哈哈,我要是說我不會呼叫這個類你會不會打死我
uj5u.com熱心網友回復:
你可以創建一個類檔案,直接粘貼進去然后編譯一次,到設計界面,可以拖動出來這個控制元件。
最簡單辦法,你去看你的Formxxx.Designer.cs檔案,找到你的DataGridView的定義,比如我這個demo
1.修改定義
private System.Windows.Forms.DataGridView dataGridView1;
改為
private MyDataGridView dataGridView1;
2.修改創建
表單的:private void InitializeComponent()
方法中,找到這個dataGridView1的創建代碼
this.dataGridView1 = new System.Windows.Forms.DataGridView();
改為:
this.dataGridView1 = new MyDataGridView();
其他完全不用動。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/269621.html
標籤:C#
上一篇:例外處理問題
