GridView
non agisce nomi delle colonne, come il gioco è fatto è datasource
proprietà di sapere queste cose.
Se è ancora necessario conoscere l'indice in base al nome di una colonna, è possibile creare un metodo di supporto per fare ciò poiché l'intestazione gridview
normalmente contiene queste informazioni.
int GetColumnIndexByName(GridViewRow row, string columnName)
{
int columnIndex = 0;
foreach (DataControlFieldCell cell in row.Cells)
{
if (cell.ContainingField is BoundField)
if (((BoundField)cell.ContainingField).DataField.Equals(columnName))
break;
columnIndex++; // keep adding 1 while we don't have the correct name
}
return columnIndex;
}
ricordare che il codice di cui sopra userà un BoundField
... quindi utilizzarlo come:
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int index = GetColumnIndexByName(e.Row, "myDataField");
string columnValue = e.Row.Cells[index].Text;
}
}
Vorrei suggerire di utilizzare il TemplateField
di avere i propri controlli, quindi è più facile afferrare i comandi come:
<asp:GridView ID="gv" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
e quindi utilizzare
string columnValue = ((Label)e.Row.FindControl("lblName")).Text;
quando si desidera tale valore? prima che la griglia sia resa nella pagina o dopo un invio? – balexandre
dopo un invio solo –