winforms 获取GridView行的单元格值

toiithl6  于 2023-01-02  发布在  其他
关注(0)|答案(9)|浏览(179)

我使用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;

并且仍然返回索引行。
还有其他建议吗?谢谢!

gab6jxml

gab6jxml1#

尝试将代码更改为

// 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

UPDATE:(基于我的注解)如果您尝试获取的只是所选行的主键值,那么另一种方法是设置

第一个月
对于网格视图定义,可以从后面的代码访问,如下所示。

TextBox1.Text = CustomersGridView.SelectedValue.ToString();
zc0qhyus

zc0qhyus2#

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
            }
        }
    }
}
6tr1vspr

6tr1vspr3#

我建议您在模板字段中使用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)
        {
           ..
        }
    }
kknvjkwl

kknvjkwl4#

你试过Cell[0]吗?记住索引从0开始,而不是1。

weylhg0b

weylhg0b5#

我也遇到了同样的问题。我发现当我在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只返回空值。我陷入这个问题很长一段时间了。我最近发现了这个问题,我想和有同样问题的人分享我的解决方案。请随时编辑这篇文章和/或更正我。
我的解决方案:

Label lbCod = GridView1.Rows["AnyValidIndex"].Cells["AnyValidIndex"].Controls["AnyValidIndex"] as Label;

我使用Controls属性来查找Label控件,我用它来显示数据,你可以找到你的。当你找到它,并转换为正确的类型对象比你可以提取文本等。例如:

string showText = lbCod.Text;

参考:reference

bn31dyow

bn31dyow6#

扩展上面Dennis 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;
    }
}
yx2lnoni

yx2lnoni7#

我在named column中查找整数值,所以我执行了以下操作:

int index = dgv_myDataGridView.CurrentCell.RowIndex;

int id = Convert.ToInt32(dgv_myDataGridView["ID", index].Value)

这样做的好处是,列可以位于网格视图中的任何位置,并且您仍然可以获得值。
干杯

5tmbdcev

5tmbdcev8#

在***SelectedIndexChanged***事件中,可以从所选行/单元格中找到如下值:

string id = gvLR.SelectedRow.Cells[3].Text.FromCellNumber();

在***RowCommand***事件中,可以找到隐藏单元格的值,如下所示:

HiddenField hdnProgramId = (((e.CommandSource as 
LinkButton).Parent.FindControl("SystemId")) as HiddenField);
string id = hdnProgramId.Value;

在***SelectedRowDelete***事件中,可以从任意单元格获取值,如下所示:

string _fileEntryId = gvLR.SelectedRow.Cells[1].Text;

对于网格视图中的任意/所有行,如下所示:

foreach (GridViewRow row in gv.Rows) 
{
  if (row.RowType == DataControlRowType.DataRow)
   { 
   string _FileEntryId = ((HiddenField)row.FindControl("SystemId")).Value;
   string kk=row.Cells[3].Text; 
   } 
}
wfypjpf4

wfypjpf49#

string id;
foreach (GridViewRow rows in grd.Rows)
{
   TextBox lblStrucID = (TextBox)rows.FindControl("grdtext");
   id=lblStrucID.Text
}

相关问题