我发现有很多方法可以在DataGridView中更改背面颜色,但无法找到更改下一行(条目或添加行)颜色的方法,这是我的“添加联系人”按钮的代码。当我改变颜色时,它会改变整个表格。我想仅更改最后一行并选择它,以便用户只需开始输入即可添加新联系人。
任何帮助将不胜感激。
private void button_Add_Contact_Click(object sender, EventArgs e)
{
customer_Ship_ContactsDataGridView.AllowUserToAddRows = true;
customer_Ship_ContactsDataGridView.ReadOnly = false;
int rowCount = customer_Ship_ContactsDataGridView.Rows.Count;
customer_Ship_ContactsDataGridView.CurrentCell = customer_Ship_ContactsDataGridView.Rows[rowCount - 1].Cells[0];
foreach (DataGridViewRow row in customer_Ship_ContactsDataGridView.Rows)
{
row.DefaultCellStyle.BackColor = Color.Yellow;
}
答案 0 :(得分:1)
您在评论中提到您希望最后一行填充颜色,并且编辑时颜色也应该在那里,并且您希望在通过数据集检索数据时发生这些事情。您还希望在加载表单时专注于最后一个可编辑的行。
尝试在单独的项目文件中使用代码,以便您可以看到它是如何工作的。这样做时创建空项目,只需添加一个dataGridView1。
public partial class Form1 : Form
{
DataSet dSet = new DataSet();
public Form1()
{
InitializeComponent();
this.Shown += Form1_Shown;
dataGridView1.AllowUserToAddRows = false;
dataGridView1.CellBeginEdit += dataGridView1_CellBeginEdit;
dataGridView1.RowStateChanged += dataGridView1_RowStateChanged;
dSet = fillDataSet();
dataGridView1.DataSource = dSet.Tables[0].DefaultView;
dSet.Tables[0].Rows.Add();
}
void Form1_Shown(object sender, EventArgs e)
{
dataGridView1.CurrentCell = dataGridView1[0, dataGridView1.Rows.Count - 1];
dataGridView1.BeginEdit(false);
}
DataSet fillDataSet()
{
DataSet dSet = new DataSet();
dSet = new DataSet();
DataTable table = new DataTable("Names");
table.Columns.Add("ID");
table.Columns.Add("Name");
table.Columns.Add("Gender");
table.Rows.Add(new object[] { 1, "Salim", "Male" });
table.Rows.Add(new object[] { 2, "Salim", "Male" });
table.Rows.Add(new object[] { 3, "Salim", "Male" });
table.Rows.Add(new object[] { 4, "Salim", "Male" });
table.Rows.Add(new object[] { 5, "Salim", "Male" });
table.Rows.Add(new object[] { 6, "Salim", "Male" });
table.Rows.Add(new object[] { 7, "Salim", "Male" });
table.Rows.Add(new object[] { 8, "Salim", "Male" });
dSet.Tables.Add(table);
return dSet;
}
void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
if (e.ColumnIndex == dSet.Tables[0].Columns.Count - 1)dSet.Tables[0].Rows.Add();
}
private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
try
{
String ssNair = e.StateChanged.ToString();
if (e.Row.Index > 0)
dataGridView1.Rows[e.Row.Index - 1].DefaultCellStyle.BackColor = Color.White;
dataGridView1.Rows[e.Row.Index].DefaultCellStyle.BackColor = Color.Yellow;
}
catch { }
}
}
对于您需要的选项类型,您应将AllowUsersToAddRows属性设置为false,并根据某些条件添加行。
我在这里添加了一个新行,而最后一行的最后一行正在编辑中。
当您与dataSet绑定时,dataGridView1.Rows.Add()不能直接添加行;因此,使用DataTable.Rows.Add()方法添加此处的行。
DataGridView.RowsAdded事件在使用Dataset填充数据时也无法工作,所以hav使用了DataGridView.RowStateChanged事件
答案 1 :(得分:0)
为什么不使用For循环而不是foreach;
int counter = customer_Ship_ContactsDataGridView.Rows.count;
for(int i = 0; i< counter; i++){
if(i == counter){
//this is where your LAST LINE code goes
row.DefaultCellStyle.BackColor = Color.Yellow;
} else {
//this is your normal code NOT LAST LINE
row.DefaultCellStyle.BackColor = Color.Red;
}
}
所以基本上你的for循环将每行迭代1次。在最后一次迭代中,它将执行备用代码。
值得注意的是:rows.count实际上可能是rows.length或其他一些措辞来获取行数到该变量中,我只是想把你的注意力集中在for循环作为解决方案。
重新编辑:上面的示例使所有行变为黄色,最后一行变为红色
答案 2 :(得分:0)
这是一个简单而有效的方法 .. 创建RowsAdded事件
public Form1()
{
dataGridView1.RowsAdded += dataGridView1_RowsAdded;
}
void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
if (e.RowIndex > 0)
dataGridView1.Rows[e.RowIndex - 1].DefaultCellStyle.BackColor = Color.White;
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Yellow;
}