J'ai beaucoup essayé et j'ai atteint une impasse.databind une grille de peuplement dans le code derrière
J'ai un pour montrer plusieurs gridviews sur une page et tous ceux-ci sont remplis dynamiquement.
J'ai trouvé un moyen de remplir dynamiquement le gridview et de l'afficher, mais je ne peux pas obtenir comment modifier ces valeurs et les afficher comme je le veux.
Voici le code. pour .aspx Page
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server">
<asp:Panel ID="Panel1" runat="server" ScrollBars ="Auto" Height="500px" BorderColor="#003399" BorderWidth="3px">
</asp:Panel>
</asp:Content>
et voici le code pour .aspx.cs
for (int j = 0; j < 5; j++)
{
GridView Grid = new GridView();
ArrayList machID = new ArrayList();
ArrayList machName = new ArrayList();
Grid.ID = machGrps[j].ToString();
Grid.AllowSorting = true;
Grid.CellSpacing = 2;
Grid.GridLines = GridLines.None;
Grid.Width = Unit.Percentage(100);
DataTable dt = new DataTable();
SqlConnection connection = new SqlConnection(Session["ConnectionStringSQL"].ToString());
connection.Open();
SqlCommand sqlCmd = new SqlCommand("select MachineID, MachineName from Machines", connection);
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
sqlDa.Fill(dt);
connection.Close();
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
machID.Add(dt.Rows[i]["MachineID"].ToString());
machName.Add(dt.Rows[i]["MachineName"].ToString());
}
DataTable taskTable = new DataTable();
taskTable.Columns.Add("MachineID");
taskTable.Columns.Add("MachineName");
if (machID.Count != 0)
{
for (int i = 0; i < machID.Count; i++)
{
DataRow tableRow = taskTable.NewRow();
tableRow["MachineID"] = machID[i];
tableRow["MachineName"] = machName[i];
taskTable.Rows.Add(tableRow);
}
}
Session["TaskTable"] = taskTable;
Grid.DataSource = Session["TaskTable"];
Grid.DataBind();
Label label = new Label();
label.Text = "Machine Grp" + Grid.ID;
Panel1.Controls.Add(label);
Panel1.Controls.Add(Grid);
}
}
NOTE CE CODE CI-DESSOUS NE PEUT ÊTRE FAITE COMME JE PLUS LA GRIDVIEW POPULATE à partir des tableaux:
J'avais l'habitude de modifier comme ceci quand le ondatabound = "GridView1_DataBound" si est appelé de la page .aspx
le code de base de données ressemble à ceci:
protected void GridView1_DataBound(object sender, EventArgs e)
{
foreach (GridViewRow myRow in GridView1.Rows)
{
//this is where ID is stored in an label template
Label Label3 = (Label)myRow.FindControl("Label3");
int val = Convert.ToInt32(Label3.Text);
Image Image5 = (Image)myRow.FindControl("Image5");
if (Convert.ToInt32(Label3.Text) < 0)
{
Image5.ImageUrl = "~/NewFolder1/warning_16x16.gif";
}
else
{
Image5.ImageUrl = "~/NewFolder1/1258341827_tick.png";
}
}
}
e.Row.RowType == DataControlRowType.DataRow comme vous le dire prendra la ligne entière, mais comment puis-je modifier la valeur de cette ligne. Comme vous pouvez le voir, je l'ai peuplé dynamiquement. Je veux dire d'abord j'avais l'étiquette à rechercher car elle contenait l'ID mais maintenant je n'ai pas d'étiquette pour trouver – user175084
drachenstern .. c'est ce que je dis qu'il n'y a pas de contrôle Label 3 car je n'ai pas créé le gridview dans la page HTML donc quand il essaie de le faire "Label Label3 = (Label) e.Row.FindControl (" Label3 ");" il n'obtiendra rien. – user175084
@ user175084 ~ Ah, je pense que je vois le problème. Savez-vous quelle cellule vous voulez de la table?(vous pouvez le trouver avec Firebug, par exemple) alors vous pourriez faire 'e.Row.Cells [0] .Text' au lieu de' Label3.Text'. Je viens de me rendre compte que vous cherchez une étiquette que vous n'avez jamais explicitement assignée. Vous pouvez également utiliser le 'DataItem' de' Row' de 'e.Row.DataItem' si vous voulez utiliser la valeur de votre datatable à la place. – jcolebrand