【发布时间】:2009-11-28 17:00:05
【问题描述】:
DataGridView 控件中的按钮单元格有一个非常烦人的问题。我在运行时将网格绑定到数据集。网格中的某些行将链接到 pdf 文档。我创建了一个按钮列并将其添加到网格中,然后循环遍历行并根据某个列的值在按钮列中设置单元格的文本。当我单步执行代码时,我可以看到按钮列的 ColumnIndex 为 10。但是,当表单出现时,我想要的行的按钮文本值是空白的。 当我单击按钮时,我检查 CellContentClick 事件以查看 ColumnIndex 是否为 10(这是按钮列),它告诉我 ColumnIndex 为 0,即使它是最后一列。然后,当我重新加载网格时,我再次调用 BindHistoryGrid 方法,如果该列存在则删除该列并重新添加它。这次它正确设置了按钮文本。是否有一些我看不到的奇怪行为?如何在第一次添加按钮 ColumnIndex 时将其设置为 10(即使它告诉我它是 10)?
private DataGridViewButtonColumn PDFButtonColumn;
private void BindHistoryGrid()
{
dataGridViewStmt.DataSource = ah.getAccountHistory(0, dateTimePicker1.Value, dateTimePicker2.Value);
if (dataGridViewStmt.Columns["GetPDFFile"] != null)
dataGridViewStmt.Columns.Remove("GetPDFFile");
dataGridViewStmt.Columns[0].DisplayIndex = 0;
dataGridViewStmt.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridViewStmt.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
dataGridViewStmt.Columns[0].Visible = false;
dataGridViewStmt.Columns[1].Visible = false;
dataGridViewStmt.Columns.Add(PDFButtonColumn);
dataGridViewStmt.RowHeadersVisible = false;
dataGridViewStmt.ReadOnly = true;
dataGridViewStmt.AllowUserToAddRows = false;
foreach (DataGridViewRow row in dataGridViewStmt.Rows)
{
//if (((string)row.Cells[5].Value).Contains("Invoice"))
if (((int)row.Cells[9].Value) > 0)
{
((DataGridViewButtonCell)(row.Cells[10])).Value = "Get Invoice";
}
else
{
((DataGridViewButtonCell)(row.Cells[10])).Value = "";
}
}
}
private void dataGridViewStmt_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 10 && dataGridViewStmt.CurrentRow.Cells[6].Value != System.DBNull.Value)
{
string pdfFile = "";
int docID = 0;
pdfFile = (string)dataGridViewStmt.CurrentRow.Cells[5].Value + ".pdf";
docID = (int)dataGridViewStmt.CurrentRow.Cells[9].Value;
if (docID > 0)
{
getPDFFile(docID, pdfFile, "pdf");
}
else
{
MessageBox.Show("No invoice available for this item"; }
}
}
【问题讨论】:
-
有人对此有任何看法或想法吗??
标签: winforms datagridview