我的datagridview遇到此问题,它第一次运行删除按钮在最后一列,但是每次我单击删除或添加并调用此printdataview()函数时,该按钮都在第一栏。
此函数最初是在Form1()上调用的,然后在每次删除记录或添加记录时都调用。我正在使用xml来存储数据并根据它添加和删除记录,这个printdataview()只是简单地刷新了它上的数据..并且以某种方式将其弄乱了,即使列长度在第一次初始化datagridview之后也被弄乱了。
感谢您的反馈。
private void PrintDataView()
{
// clears the old data and repopulate it.
C_DB.DataSource = null;
XmlReader xmlFile;
xmlFile = XmlReader.Create(filename, new XmlReaderSettings());
DataSet ds = new DataSet();
ds.ReadXml(xmlFile);
if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0){
DataView dv = new DataView(ds.Tables[0]);
// first adds all rows after sorting today's list into datagridview
string Search = DateTime.Today.ToShortDateString();
dv.RowFilter = "DateTime LIKE '%" + Search + "%'";
dv.Sort = "DateTime ASC";
C_DB.DataSource = dv;
// then add the delete button if there is more than one row
if (dv.Count > 0 && C_DB.ColumnCount != 7 && C_DB.RowCount > 0)
{
// add button
DataGridViewButtonColumn btn = new DataGridViewButtonColumn();
C_DB.Columns.Add(btn);
btn.HeaderText = "Delete Row";
btn.Text = "Delete";
btn.Name = "btn";
btn.UseColumnTextForButtonValue = true;
}
// This scrolls to bottom
if (C_DB.RowCount > 10)
{
C_DB.FirstDisplayedScrollingRowIndex = C_DB.RowCount - 1;
}
}
else
{
C_ErrorMessage.Text = "No Data Found";
}
C_DB.Refresh();
xmlFile.Close();
}
答案 0 :(得分:0)
Nvm,我发现了问题所在。
代替
//清除旧数据并重新填充。
C_DB.DataSource = null;
//我将其更改为
C_DB.Columns.Clear();
显然,使数据源为空不会使以前的结构清空。
这也固定了我的列宽。.稍后我设置
谢谢。
答案 1 :(得分:0)
请注意,这不是完整的解决方案。
“删除”按钮仅在第一次出现在列末尾,然后将位置更改为“第一”的问题是因为通过执行方法PrintDataView()
添加按钮时,您没有指定其在DataGridView中的位置。使用类似这样的内容:
//Your code
C_DB.Columns.Add(btn);
btn.HeaderText = "Delete Row";
btn.Text = "Delete";
btn.Name = "btn";
btn.UseColumnTextForButtonValue = true;
//Set the desired button position here
C_DB.Columns[btn.Name].DisplayIndex = 5; //Whatever value you want starting from zero
有关更多信息。参见:Full example on MS Site
现在,您可以根据内容分别调整每个列的宽度或设置一个属性以使所有列的最大宽度如下所示: