Pergunta

Eu estou usando uma lista de objetos como a fonte de dados do meu GridView e quando eu definir colunas para não ser visíveis as atualizações falham porque o valor dessas colunas é alterada para nula (ea coluna não permite nulos) . Os valores existem quando as colunas são visíveis, mas eu realmente não quero exibir essas colunas porque, na maioria das vezes, eles são colunas ID que o usuário não precisa realmente de ver.

EDIT: Eu tentei a opção campo oculto mas ainda define o valor como nulo. Eu olhei para a fonte da página e existe o campo oculto com o valor apropriado ...

Foi útil?

Solução

Eu encontrei esta solução para simular colunas escondidas em .Net 2.0:

Implementar o evento GridView.RowCreated.

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
    e.Row.Cells[1].Visible = false;
    e.Row.Cells[2].Visible = false;
}

Aqui está o link: http://www.beansoftware.com/ASP.NET-Tutorials/GridView -Hidden-Column.aspx

Eu acho que em 2,0 quando uma coluna não é visível a ligação de dados falhar para essa coluna, mas isto oculta método após a ligação foi estabelecida de modo ele engana o sistema (?).

Outras dicas

Microsoft recomenda usar os DataKeyNames propriedade do controle GridView.

Em vez de usar code-behind para ocultar determinadas colunas, você pode simplesmente remover os campos dependentes do GridView e especificá-los na propriedade DataKeyNames:

<asp:GridView ID="GridView1" runat="server" 
        DataKeyNames="SalesOrderID,SalesOrderDetailID"
        DataSourceID="LinqDataSource1">

Desta forma, os campos não irá mostrar ao usuário, mas o GridView sabe para manter os valores em torno de atualização, etc.

Se você não está fazendo isso já, eu consideraria usando colunas de modelo para os seus dados e fazer de dados "manual" de ligação (ou "inline" ou no código por trás página usando o evento RowDataBound). Dessa forma, você pode testar para DBNull e simplesmente ignorar colocar um valor na coluna se o valor for NULL. Isto permitirá também que para as colunas de ser devidamente escondido.

Você poderia fazê-lo com campos ocultos para os valores que você não deseja exibir. Dessa forma, você ainda pode usar a mesma ligação de dados e outras funções que você faz hoje.

Quando um campo dentro GridView é tornada invisível, os seus valores de células não são mais acessíveis ou estes forem nulos ou esvaziar.

Para resolver esse problema, você apenas tem que nomes atribuir colunas (campos ocultos) para DataKeyNames propriedade da GridView fazendo DataKeyNames="colName1,colName2,colName3".

Em seguida, acessar seus valores de célula como cellValue = GridView1.DataKeys[0]["ID"].ToString();

Eu escrevi um post simples que demonstra a solução para seu problema em aqui .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top