2010-09-28 8 views
3

Markup:ASP.NET: Comment afficher une autre valeur retournée à partir d'une base de données dans un GridView

<asp:GridView ID="GridView1" runat="Server"> 
    <Columns> 
     <asp:BoundField DataField="status_column" HeaderText="Status" /> 
     <asp:BoundField ... 
     <asp:BoundField ... 
    </Columns> 
</asp:GridView> 

Code:

GridView1.DataSource = _dataSet 
DataBind() 

Les valeurs stockées dans ma base de données sont des nombres entiers , 1 - 9. Chaque valeur a une valeur de chaîne associée que je veux afficher dans mon GridView. Ex: 1 = "Actif"; 2 = "En attente"; Comment filtrer les données entrantes afin que je puisse afficher la valeur de chaîne associée au lieu des entiers de ma table?

Répondre

2

Vous avez deux options:

  1. Modifiez votre DataSet, de sorte qu'il containt une colonne pour la chaîne représentation des données que vous souhaitez afficher . Utilisez un TemplateField contenant une étiquette. Abonnez-vous à la OnRowDataBound événement du GridView, et d'obtenir cette étiquette avec e.Row.FindControl (« LabelID »), jeter le e.Row.DataItem à votre DataRow, et affecter la représentation de chaîne de votre entier valeur là-bas.

Je déconseille la solution postée par anishmarokey, parce que la requête n'est pas l'endroit correct pour cela. Pensez un peu plus gros, à propos de la localisation par exemple. Je ne travaillerais pas avec cette solution, mais avec les deux solutions proposées.

Édition1: Similaire répond de moi concernant l'événement OnRowDataBound. Si ceux-ci ne sont pas vous aider, je crains que vous devez utiliser google pour trouver d'autres exemples:
Programmatically access GridView columns and manipulate
Custom GridView delete button
How to bind a complex dictionary to a Gridview in asp.net?

Edit2: J'ai écrit un article qui élabore ce sujet plus: http://www.tomot.de/en-us/article/7/asp.net/gridview-overview-of-different-ways-to-bind-data-to-columns

+0

pourriez-vous éventuellement montrer un exemple de vos deux solutions? Merci. – user408869

+0

J'ai ajouté quelques exemples liés au code pour la deuxième option – citronas

1

au lieu de le faire en C#, Si vous utilisez SQL vous pouvez essayer avec

quand alors état dans une requête

SELECT title, price, 
     Category = CASE column1 
     WHEN column1 = '1' THEN 'Active' 
      WHEN column1 = '2' THEN 'On Hold' 
      ..... 
      ELSE 'your value' 
     END, 
FROM table 

qui se lient alors au gridview

+0

Ce qui est « Catégorie »? – user408869

+0

La catégorie est un nom d'alias. cela viendra en page .cs à lier – anishMarokey

0

vous pouvez enregistrer une liste de KeyPairValue en utilisant le dictionnaire et essayer d'obtenir la valeur dans la vue:

Dictionary<int,string> stringList = //Any code to fill the dictionary, now each integer is related to a string. 

dans la page

<asp:BoundField DataField="<%Eval(stringList[status_column])%>" HeaderText="Status" /> 
+0

Avez-vous essayé le code? Est-ce que ça marche? Je n'ai pas d'IDE ici, mais cela ne devrait pas ressembler à ça: '<% this.stringList [Eval ("status_column")]%>', ou '<% this.stringList [Eval ("status_column")];%> ' – citronas

+0

ooops, désolé c'est de ma faute, je n'ai pas essayé le code, mais je voulais que l'idée soit claire. citronas, je pense que votre code est correct. –

1

En supposant que vous ne modifiez pas dans le gridview, je voudrais juste rejoindre à la table FK dans le SQL et le retour que l'état au lieu de l'ID.

--Include this as part of your select statement for the datagrid: 
SELECT CategoryText as status_column 
FROM status_table st INNER JOIN category_table ct ON st.status_column = ct.status_column 
1

Puisqu'il s'agit d'une base de données, je pense qu'il est très probable que vous trouverez dans la table qui définit les catégories.

Tout ce que vous devez faire est de rejoindre les deux

Select Item.Id, Item.Title, Item.Price, Category.Id, Category.Name 
From Item 
    Inner Join Category 
     ON Item.CategoryId = Category.Id 
Questions connexes