GridView
не действует как имена столбцов, так как это свойство datasource
, чтобы знать эти вещи.
Если вам все еще нужно знать индекс по имени столбца, то вы можете создать помощникаспособ сделать это, поскольку заголовок gridview
обычно содержит эту информацию.
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;
}
помните, что в приведенном выше коде будет использоваться BoundField
... затем используйте его следующим образом:
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;
}
}
Я бы настоятельно рекомендовал вам использовать TemplateField
, чтобы иметь свои собственные элементы управления, тогда проще получить такие элементы управления, как:
<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>
, а затем использовать
string columnValue = ((Label)e.Row.FindControl("lblName")).Text;