我正在用C#开发桌面应用程序。当用户在适当的文本框过滤器中键入内容时,数据源将更改,以从我希望它获取的表中获取信息,从而产生以下代码:
private void dadosDataGridView_DataSourceChanged(object sender, EventArgs e)
{
DataTable dt = (DataTable)dadosDataGridView.DataSource;
if (dt.Columns.Contains("versao"))
{
...
}
else if (dt.Columns.Contains("periodicidade"))
{
dadosDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dadosDataGridView.Columns["idlayout"].Visible = false;
dadosDataGridView.Columns["idmodulo"].Visible = false;
dadosDataGridView.Columns["nomemodulo"].HeaderText = "Nome do Módulo";
dadosDataGridView.Columns["nomemodulo"].MinimumWidth = 600;
dadosDataGridView.Columns["periodicidade"].HeaderText = "Periodicidade";
//doing this to not have weird conversion problems
foreach (DataGridViewColumn coluna in dadosDataGridView.Columns)
{
coluna.ValueType = typeof(string);
}
//
foreach (DataGridViewRow linha in dadosDataGridView.Rows)
{
linha.Cells["periodicidade"].ValueType = typeof(string);
string texto = new ModulosBLL().ConvertePeriodicidadeInteiroEmTexto(Convert.ToInt32(linha.Cells["periodicidade"].Value));
DataGridViewCell tb = linha.Cells["periodicidade"];
tb.Value = texto;
}
}
...
}
“ periodicidade”列的值是1到4,我尝试将其转换为用户可读的内容:
public string ConvertePeriodicidadeInteiroEmTexto(int valordaperiodicidade)
{
string nome = string.Empty;
switch (valordaperiodicidade)
{
case 1:
nome = "Mensal";
break;
case 2:
nome = "Semestral";
break;
case 3:
nome = "Anual";
break;
case 4:
nome = "Ocasional";
break;
default:
break;
}
return nome;
}
由于某种原因,gridviewcell的值不会改变。变量“ texto”甚至返回正确的文本,但tb.Value保留其 int 值。
编辑:我已经在另一个线程上尝试了所有想法 How to programmatically set cell value in DataGridView?。绝对没有一个工作