GridViewを使用しています-AutoGenerateSelectButton = "True"
列1のセル値を取得するために行を選択します。
私が試してみました:
GridViewRow row = dgCustomer.SelectedRow;
TextBox1.Text = "Cell Value" + row.Cells[1].Text + "";
そして、それは「セル値」を書き込みますが、それ以外は何も書き込みません。
最終的に行の数(インデックス)を取得できましたが、セルの値は取得できませんでした。
GridViewRow row = dgCustomer.SelectedRow;
TextBox1.Text = row.RowIndex.ToString();
私が試してみました:
TextBox1.Text = dgCustomer.Rows[row.RowIndex].Cells[1].Text;
引き続きインデックス行を返します。
他の提案はありますか?ありがとうございました!
コードを変更してみてください
// 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
PDATE:(私のコメントに基づく)取得しようとしているのが選択した行の主キー値のみである場合、代替アプローチは設定することです
datakeynames="yourprimarykey"
以下のようなコードビハインドからアクセスできるgridview定義の場合。
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
}
}
}
}
テンプレートフィールド内でHiddenFieldを使用し、FindControlを使用してこのフィールドを見つけることをお勧めします。
すなわち:
ASPX
<asp:TemplateField>
<ItemTemplate>
<asp:HiddenField ID="hfFname" runat="server" Value='<%# Eval("FileName") %>' />
</ItemTemplate>
</asp:TemplateField>
コードビハインド
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)
{
..
}
}
やってみました Cell[0]
?インデックスは1ではなく0から始まることに注意してください。
上記のデニスRの回答を展開すると...これは見出しテキストに基づいて値を取得します(そのため、特に動的に変化する場合は、どの列を知る必要はありません)。
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;
}
}
私はあなたと同じ問題を抱えていました。 GridViewでBoundField
タグを使用してデータを表示すると、そのことがわかりました。 row.Cells[1].Text
はで働いています:
GridViewRow row = dgCustomer.SelectedRow;
TextBox1.Text = "Cell Value" + row.Cells[1].Text + "";
しかし、TemplateField
タグを使用して次のようなデータを表示する場合:
<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>
row.Cells[1].Text
は単にnullを返します。私は長い間この問題に巻き込まれました。私は最近考え出し、同じ問題を抱えている人と私のソリューションを共有したいと思います。この投稿を編集および/または修正してください。
私のソリューション:
Label lbCod = GridView1.Rows["AnyValidIndex"].Cells["AnyValidIndex"].Controls["AnyValidIndex"] as Label;
Controls
属性を使用して、データを表示するために使用するLabel
コントロールを見つけます。それを見つけて、正しいタイプのオブジェクトに変換すると、テキストなどを抽出できます。例:
string showText = lbCod.Text;
参照: 参照
名前付き列で整数値を探していたので、以下を行いました:
int index = dgv_myDataGridView.CurrentCell.RowIndex;
int id = Convert.ToInt32(dgv_myDataGridView["ID", index].Value)
これの良い点は、列がグリッドビュー内の任意の位置にある場合でも、値を取得できることです。
乾杯