Получить значение ячейки строки GridView
Я использую GridView - AutoGenerateSelectButton = "True"
, чтобы выбрать строку, чтобы получить значение ячейки столбца 1.
Я пробовал:
GridViewRow row = dgCustomer.SelectedRow;
TextBox1.Text = "Cell Value" + row.Cells[1].Text + "";
И он пишет "Cell Value", но ничего больше.
Наконец, я смог получить номер строки (index), но не значение ячейки.
GridViewRow row = dgCustomer.SelectedRow;
TextBox1.Text = row.RowIndex.ToString();
Я пробовал:
TextBox1.Text = dgCustomer.Rows[row.RowIndex].Cells[1].Text;
и все еще возвращает строку индекса.
Любые другие предложения?
Спасибо!
Ответы
Ответ 1
Попробуйте изменить свой код на
// Get the currently selected row using the SelectedRow property.
GridViewRow row = dgCustomer.SelectedRow;
// And you respective cell value
TextBox1.Text = row.Cells[1].Text
ОБНОВЛЕНИЕ: (на основе моего комментария)
Если все, что вы пытаетесь получить, является значением первичного ключа для выбранной строки, тогда альтернативный подход заключается в установке
datakeynames="yourprimarykey"
для определения gridview, к которому можно получить доступ из кода, как показано ниже.
TextBox1.Text = CustomersGridView.SelectedValue.ToString();
Ответ 2
Технология итерации формы Windows
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
}
}
}
}
Ответ 3
Я предлагаю вам использовать поле 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)
{
..
}
}
Ответ 4
Вы пробовали Cell[0]
? Помните, что индексы начинаются с 0, а не 1.
Ответ 5
Более подробно о ответе Денниса Р выше... Это позволит получить значение, основанное на тексте заголовка (поэтому вам не нужно знать, какой столбец... особенно, если его динамическое изменение).
Пример установки переменной сеанса в 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;
}
}
Ответ 6
У меня была такая же проблема, как у вас. Я обнаружил, что когда я использую тег BoundField
в GridView, чтобы показать свои данные. 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;
Ссылка:
ссылка
Ответ 7
Я искал целочисленное значение в именованном столбце, поэтому я сделал следующее:
int index = dgv_myDataGridView.CurrentCell.RowIndex;
int id = Convert.ToInt32(dgv_myDataGridView["ID", index].Value)
Хорошая вещь об этом - то, что столбец может быть в любой позиции в представлении сетки, и вы все равно получите значение.
ура
Ответ 8
string id;
foreach (GridViewRow rows in grd.Rows)
{
TextBox lblStrucID = (TextBox)rows.FindControl("grdtext");
id=lblStrucID.Text
}