2010-09-02 7 views
0

Je travaille sur cela depuis quelques jours maintenant, je chaque fois que je reviens à ce problème, je ne vois tout simplement pas pourquoi il ne fonctionne pas correctement.Exception de référence null lors de la liaison DataTable à GridView

J'essaye de lier un DataTable à un contrôle GridView que je crée dynamiquement. Je crée le contrôle GridView, l'ajoute à une table, puis affectez la propriété DataSource à mon DataTable.

Voici le code:

Table tbl = new Table(); 

DataTable dattbl = Core.Transreports(Request.QueryString["itemaddress"], Request.QueryString["docnum"], Request.QueryString["docid"]); 

GridView dg = new GridView() { ID = "dg", AllowPaging = true, PageSize = 10 }; 

TableRow tr = new TableRow(); 

TableCell tc = new TableCell(); 
tc.Controls.Add(dg); 
tc.ColumnSpan = 10; 
tr.Cells.Add(tc); 

tbl.Rows.Add(tr); 

if (dattbl.Rows.Count > 0) 
{ 
    dg.DataSource = dattbl; 
    dg.DataBind(); 
} 

Alors, quand je reçois la dernière ligne, où j'exécute la méthode DataBind (dg.DataBind()) est l'endroit où je reçois l'exception de référence null .

Je ne suis pas vraiment sûr pourquoi je suis confronté à cette erreur, et je n'ai pas encore trouvé de solution. J'ai vérifié pour m'assurer qu'il n'y a aucune valeur nulle dans le DataTable, et il n'y en a aucun. Donc je suis à perte. Aidez-moi empiler débordement, vous êtes mon seul espoir.

+0

Pouvez-vous poster les détails d'exception? (message, trace de pile, etc.) –

+0

Avez-vous ajouté le tableau à la page? Essayez de ne pas autoriser la pagination, ce qui peut résoudre le problème si vous n'avez pas ajouté de page. – Brett

+0

@Brett, ça a marché! Merci. Maintenant, j'ai besoin de savoir à la page ... – CrowderSoup

Répondre

0

Puisque vous obtenez l'erreur parce que le gridview n'est pas un contrôle sur la page, ce que vous devez faire est de mettre un <asp:GridView> dans la page, ou le mettre dans un certain contrôle d'asp. Puis placez ce contrôle sur la page. Voici un exemple:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Sample.ascx.cs" Inherits="Contacts" %> 

<asp:GridView id="sample" runat="server" AllowPaging="true" PageSize="10"></asp:GridView> 

Ensuite, vous pouvez faire référence à ce gridview à partir du code derrière comme ceci:

sample.DataSource = dattbl; 
sample.DataBind(); 
+0

merci pour l'aide! – CrowderSoup

1

J'ai remplacé votre appel par Core.Transreports(...) par un DataTable factice et je n'ai pas pu le reproduire. Pouvez-vous fournir plus d'informations? Que dit la trace de la pile? Comment fonctionne Core.Transreports()?

+0

D'accord, j'ai fait la même chose et aucune exception –

+0

Je l'ai fait sans exception aussi bien ... hmmmm. Bien fondamentalement, Core.Transreports() est une méthode qui génère une requête SQL, appelle une autre fonction qui exécute la requête et retourne un DataTable. – CrowderSoup

0

Votre code ressemblait à ceci:

if (dattbl.Rows.Count > 0){ dg.DataSource = dattbl; dg.DataBind();} 

Avec une exception "sur la dernière ligne".

Etes-vous sûr que ce n'est pas le dattbl qui est null?

+0

Désolé, pour une raison étrange, mon code a été reformaté par débordement de pile ... il y a des sauts de ligne dans ma source. Et oui, j'en suis sûr. J'ai essayé de commenter où je fais le DataBinding et juste sortie chaque colonne/rangée du datatable individuellement. Cela fonctionne sans erreurs. – CrowderSoup