Quando estamos usando o footer da gridview como meio para inserir novos registros na gridview ficamos com um problema quando a lista está vazia, pois desse jeito a gridview não é exibida e logo não tem como fazer a inserção. Estou mostrando uma pequena solução para resolver esse problema, não é das mais bonitas, mas é bem simples e pelo o que andei pesquisando essa solução e a outra de extender a classe gridview são as mais usadas, sendo que a segunda requer um pouco mais de trabalho.
// A lista está vazia
if (vetProduto.Count == 0)
{
// Instancio uma nova lista do mesmo tipo do objeto presente na gridview
List<Produto> ls = new List<Produto>();
// Instancio e adiciono na lista um produto
ls.Add(new Produto());
// Faço o bindign
grid.DataSource = ls;
grid.DataBind();
// Obter o número de celulas da gridview
int columnSpan = grid.Rows[0].Cells.Count;
// Apaga todo o conteudo da primeira linha
grid.Rows[0].Cells.Clear();
// Adiciona uma nova celula
grid.Rows[0].Cells.Add(new TableCell());
// Faz o conteudo da celula ficar centralizado
grid.Rows[0].Attributes.CssStyle.Add("text-align", "center");
// Adiciona uma frase informativa
grid.Rows[0].Cells[0].Text = "Não existe nenhum produto cadastrado.";
// Coloca a celula para ocupar todo o espaço da tabela
grid.Rows[0].Cells[0].ColumnSpan = columnSpan;
}
else
{
// A lista nao estava vazia, logo trata normalmente
grid.DataSource = vetProduto;
grid.DataBind();
}
Agosto 12, 2008 at 4:55 pm
Olá,
gostei da solução.
O problema é que quando algum componente da mesma página em que está o gridview dá um postback ele recria as colunas que haviam inicialmente no gridview e joga as colunas com o texto de “não existe nenhum” para a direita do grid.
Tem alguma idéia de como resolver isto?
Obrigado,
André Belloti.
Agosto 12, 2008 at 5:05 pm
Poderia tentar colocar o gridview em um updatepanel, acredito que deva funcionar.
Agosto 12, 2008 at 5:17 pm
Deve funcionar, porém não no meu caso.
No meu caso o postback ocorre por causa de um combobox que está no footer do próprio gridview.
Obrigado,
André Belloti.
Agosto 15, 2008 at 3:56 pm
Assim tbm dá:
Public Sub BuildNoRecords(ByVal gridView As GridView, ByVal dt As Data.DataTable)
Try
If dt.Rows.Count = 0 Then
‘Add a blank row to the dataset
dt.Rows.Add(dt.NewRow())
‘Bind the DataSet to the GridView
gridView.DataSource = dt
gridView.DataBind()
‘Get the number of columns to know what the Column Span should be
Dim columnCount As Integer = gridView.Rows(0).Cells.Count
‘Call the clear method to clear out any controls that you use in the columns. I use a dropdown list in one of the column so this was necessary.
gridView.Rows(0).Cells.Clear()
gridView.Rows(0).Cells.Add(New TableCell)
gridView.Rows(0).Cells(0).ColumnSpan = columnCount
gridView.Rows(0).Cells(0).Text = “Nenhum registro encontrado!”
End If
Catch ex As Exception
‘Do your exception handling here
tratarException(ex, CType(Master.FindControl(“lblErro”), Label))
End Try
End Sub