Domanda

Sto usando un elenco di oggetti come l'origine dati di GridView e quando imposto le colonne in modo che non siano visibili, gli aggiornamenti falliscono perché il valore di quelle colonne viene modificato in null (e la colonna non consente null) . I valori esistono quando le colonne sono visibili ma in realtà non voglio visualizzare queste colonne perché, per la maggior parte, sono colonne ID che l'utente non ha davvero bisogno di vedere.

EDIT: ho provato l'opzione campo nascosto ma imposta ancora il valore su null. Ho guardato l'origine della pagina e il campo nascosto esiste con il valore appropriato ...

È stato utile?

Soluzione

Ho trovato questa soluzione per simulare colonne nascoste in .Net 2.0:

Implementa l'evento GridView.RowCreated.

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

Ecco il link: http://www.beansoftware.com/ASP.NET-Tutorials/GridView -Hidden-Column.aspx

Suppongo che in 2.0 quando una colonna non è visibile, il databinding non riesce per quella colonna ma questo metodo si nasconde dopo che il collegamento è stato stabilito in modo da ingannare il sistema (?).

Altri suggerimenti

Microsoft consiglia di utilizzare DataKeyNames proprietà del controllo GridView.

Invece di usare code-behind per nascondere determinate colonne, puoi semplicemente rimuovere i campi associati da GridView e specificarli nella proprietà DataKeyNames:

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

In questo modo i campi non verranno mostrati all'utente ma GridView sa mantenere i valori in giro per l'aggiornamento, ecc.

Se non lo fai già, prenderei in considerazione l'uso delle colonne Template per i tuoi dati e farei "manuale" associazione dati ("inline" o nel codice dietro la pagina usando l'evento RowDataBound). In questo modo è possibile verificare DBNull e semplicemente ignorare l'inserimento di un valore nella colonna se il valore è NULL. Ciò consentirà inoltre di nascondere correttamente le colonne.

Potresti farlo con campi nascosti per i valori che non vuoi visualizzare. in questo modo è ancora possibile utilizzare lo stesso databinding e le altre funzioni di oggi.

Quando un campo all'interno di GridView viene reso invisibile, i suoi valori di cella non sono più accessibili o sono nulli o vuoti.

Per risolvere questo problema, devi solo assegnare i nomi di colonna (Campi nascosti) alla proprietà DataKeyNames di GridView facendo DataKeyNames = " colName1, colName2, colName3 " .

Quindi accedi ai loro valori di cella come cellValue = GridView1.DataKeys [0] [" ID "]. ToString ();

Ho scritto un semplice post che dimostra la soluzione al tuo problema all'indirizzo qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top