asp.netでgridview
を使用していますが、今度はセルの値をセルのインデックスではなく列の名前で欲しいです。asp.netのGridViewで列名でセルの値を取得する方法
どのようにそれはそれはそれはそれらのものを知ってdatasource
プロパティのだとして、列名として機能していないセルの列名によって
asp.netでgridview
を使用していますが、今度はセルの値をセルのインデックスではなく列の名前で欲しいです。asp.netのGridViewで列名でセルの値を取得する方法
どのようにそれはそれはそれはそれらのものを知ってdatasource
プロパティのだとして、列名として機能していないセルの列名によって
GridView
をセルの値を取得することにより可能です。
カラム名が指定されたインデックスをまだ知っている必要がある場合は、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
を使用することを覚えている:私は強くあなたがあなた自身のコントロールを持っているTemplateField
を使用することを示唆している
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;
}
}
、それはに簡単です以下のようにこれらのコントロールをつかむ:
<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;
その長い時間がなく、このコードの比較的小さな作品は読んで入手しやすいようです
:あなたは列のインデックスを取得するにはDataRowViewを使用することができます
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
int index;
string cellContent;
foreach (TableCell tc in ((GridView)sender).HeaderRow.Cells)
{
if(tc.Text.Equals("yourColumnName"))
{
index = ((GridView)sender).HeaderRow.Cells.GetCellIndex(tc);
cellContent = ((GridView)sender).SelectedRow.Cells[index].Text;
break;
}
}
}
。
ラムダ愛好家のためのvoid OnRequestsGridRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
var data = e.Row.DataItem as DataRowView;
// replace request name with a link
if (data.DataView.Table.Columns["Request Name"] != null)
{
// get the request name
string title = data["Request Name"].ToString();
// get the column index
int idx = data.Row.Table.Columns["Request Name"].Ordinal;
// ...
e.Row.Cells[idx].Controls.Clear();
e.Row.Cells[idx].Controls.Add(link);
}
}
}
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
var boundFields = e.Row.Cells.Cast<DataControlFieldCell>()
.Select(cell => cell.ContainingField).Cast<BoundField>().ToList();
int idx = boundFields.IndexOf(
boundFields.FirstOrDefault(f => f.DataField == "ColName"));
e.Row.Cells[idx].Text = modification;
}
}
アレキサンダーの答えでindexcolumnと小さなバグ: 私たちは、 "見つからない" 欄の世話をする必要があります。
int GetColumnIndexByName(GridViewRow row, string columnName)
{
int columnIndex = 0;
int foundIndex=-1;
foreach (DataControlFieldCell cell in row.Cells)
{
if (cell.ContainingField is BoundField)
{
if (((BoundField)cell.ContainingField).DataField.Equals(columnName))
{
foundIndex=columnIndex;
break;
}
}
columnIndex++; // keep adding 1 while we don't have the correct name
}
return foundIndex;
}
と
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int index = GetColumnIndexByName(e.Row, "myDataField");
if(index>0)
{
string columnValue = e.Row.Cells[index].Text;
}
}
}
グリッドのデータソースに基づいてデータテーブルが宣言されたら、columnsコレクションの列名で列インデックスを参照します。この時点で、必要に応じてインデックスを使用して、セルの情報を取得したり、セルをフォーマットしたりします。
protected void gridMyGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataTable dt = (DataTable)((GridView)sender).DataSource;
int colIndex = dt.Columns["MyColumnName"].Ordinal;
e.Row.Cells[colIndex].BackColor = Color.FromName("#ffeb9c");
}
}
単純なコードを投稿しないでください。解決策を説明してください。 –
いつ値を入力しますか?グリッドがページにレンダリングされる前に、または送信後に? – balexandre
提出後 –