J'utilise le GridView - AutoGenerateSelectButton = "True"
pour sélectionner la ligne afin d'obtenir la valeur de cellule de la colonne 1.
J'ai essayé:
GridViewRow row = dgCustomer.SelectedRow;
TextBox1.Text = "Cell Value" + row.Cells[1].Text + "";
Et il écrit la "valeur de la cellule" mais rien d'autre.
J'ai finalement pu obtenir le numéro de la ligne (index) mais pas la valeur de la cellule.
GridViewRow row = dgCustomer.SelectedRow;
TextBox1.Text = row.RowIndex.ToString();
J'ai essayé:
TextBox1.Text = dgCustomer.Rows[row.RowIndex].Cells[1].Text;
et retourne toujours la ligne d'index.
D'autres suggestions? Merci!
Essayez de changer votre code pour
// Get the currently selected row using the SelectedRow property.
GridViewRow row = dgCustomer.SelectedRow;
// And you respective cell's value
TextBox1.Text = row.Cells[1].Text
UPDATE: (basé sur mon commentaire) Si tout ce que vous essayez d'obtenir est la valeur de clé primaire pour la ligne sélectionnée, une autre approche consiste à définir
datakeynames="yourprimarykey"
pour la définition de gridview accessible à partir du code ci-dessous, comme ci-dessous.
TextBox1.Text = CustomersGridView.SelectedValue.ToString();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Selected)
{
foreach (DataGridViewCell cell in row.Cells)
{
int index = cell.ColumnIndex;
if (index == 0)
{
value = cell.Value.ToString();
//do what you want with the value
}
}
}
}
Je vous suggère d'utiliser un champ caché à l'intérieur du champ de modèle, puis d'utiliser FindControl pour rechercher ce champ.
c'est à dire:
ASPX
<asp:TemplateField>
<ItemTemplate>
<asp:HiddenField ID="hfFname" runat="server" Value='<%# Eval("FileName") %>' />
</ItemTemplate>
</asp:TemplateField>
Code derrière
protected void gvAttachments_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
GridView gv1 = (GridView)sender;
GridViewRow gvr1 = (GridViewRow)gv1.Rows[e.RowIndex];
//get hidden field value and not directly from the GridviewRow, as that will be null or empty!
HiddenField hf1 = (HiddenField)gvr1.FindControl("hfFname");
if (hf1 != null)
{
..
}
}
Avez-vous essayé Cell[0]
? Rappelez-vous que les index commencent à 0 et non à 1.
Répondant plus haut à Dennis R, la réponse ci-dessus ...
Exemple de définition d'une variable de session sur SelectedIndexChange.
protected void gvCustomer_SelectedIndexChanged(object sender, EventArgs e)
{
int iCustomerID = Convert.ToInt32(Library.gvGetVal(gvCustomer, "CustomerID"));
Session[SSS.CustomerID] = iCustomerID;
}
public class Library
{
public static string gvGetVal(GridView gvGrid, string sHeaderText)
{
string sRetVal = string.Empty;
if (gvGrid.Rows.Count > 0)
{
if (gvGrid.SelectedRow != null)
{
GridViewRow row = gvGrid.SelectedRow;
int iCol = gvGetColumn(gvGrid, sHeaderText);
if (iCol > -1)
sRetVal = row.Cells[iCol].Text;
}
}
return sRetVal;
}
private static int gvGetColumn(GridView gvGrid, string sHeaderText)
{
int iRetVal = -1;
for (int i = 0; i < gvGrid.Columns.Count; i++)
{
if (gvGrid.Columns[i].HeaderText.ToLower().Trim() == sHeaderText.ToLower().Trim())
{
iRetVal = i;
}
}
return iRetVal;
}
}
J'ai eu le même problème que le vôtre. J'ai constaté que lorsque j'utilise la balise BoundField
dans GridView pour afficher mes données. Le row.Cells[1].Text
travaille dans:
GridViewRow row = dgCustomer.SelectedRow;
TextBox1.Text = "Cell Value" + row.Cells[1].Text + "";
Mais quand j'utilise la balise TemplateField
pour afficher des données comme celle-ci:
<asp:TemplateField HeaderText="料號">
<ItemTemplate>
<asp:Label ID="Part_No" runat="server" Text='<%# Eval("Part_No")%>' ></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="bhead" />
<ItemStyle CssClass="bbody" />
</asp:TemplateField>
Le row.Cells[1].Text
ne fait que renvoyer null. Je suis resté coincé dans ce problème pendant longtemps. Je me suis rendu compte récemment et je veux partager ma solution avec quelqu'un qui a le même problème. N'hésitez pas à éditer ce message et/ou à me corriger.
Ma solution:
Label lbCod = GridView1.Rows["AnyValidIndex"].Cells["AnyValidIndex"].Controls["AnyValidIndex"] as Label;
J'utilise l'attribut Controls
pour trouver le contrôle Label
que j'utilise pour afficher les données et vous pouvez trouver le vôtre. Lorsque vous le trouvez et le convertissez dans le type d'objet correct, vous pouvez extraire du texte, etc. Ex:
string showText = lbCod.Text;
Référence: référence
Je cherchais une valeur entière dans la colonne nommée, alors j'ai fait ce qui suit:
int index = dgv_myDataGridView.CurrentCell.RowIndex;
int id = Convert.ToInt32(dgv_myDataGridView["ID", index].Value)
La bonne chose à propos de cela est que la colonne peut être dans n'importe quelle position dans la vue en grille et vous obtiendrez toujours la valeur.
À votre santé