C# 获取GridView行的单元格值

C# 获取GridView行的单元格值,c#,winforms,gridview,C#,Winforms,Gridview,我正在使用GridView-AutoGenerateSelectButton=“True”选择行,以获取第1列单元格值 GridViewRow row = dgCustomer.SelectedRow; TextBox1.Text = row.RowIndex.ToString(); 我试过: GridViewRow row = dgCustomer.SelectedRow; TextBox1.Text = "Cell Value" + row.Cells[1].Text + ""; 它只写

我正在使用GridView-
AutoGenerateSelectButton=“True”
选择行,以获取第1列单元格值

GridViewRow row = dgCustomer.SelectedRow;
TextBox1.Text = row.RowIndex.ToString();
我试过:

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
更新:(根据我的评论) 如果您试图获取的全部内容都是选定行的主键值,则另一种方法是设置

datakeynames=“yourprimarykey”

对于gridview定义,可以从下面的代码中访问它

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

我建议您在模板字段中使用HiddenField使用FindControl来查找此字段

即:

ASPX

Windows窗体迭代技术
您是否尝试过
单元格[0]
?记住索引从0开始,而不是从1开始。

在上面的Dennis R答案上展开。。。
string id;
foreach (GridViewRow rows in grd.Rows)
{
   TextBox lblStrucID = (TextBox)rows.FindControl("grdtext");
   id=lblStrucID.Text
}
这将获得基于标题文本的值(因此您不需要知道哪个列…尤其是当其动态变化时)

在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;
    }
}
protectedvoid gvCustomer\u SelectedIndexChanged(对象发送方,事件参数e)
{
int-icCustomerId=Convert.ToInt32(Library.gvGetVal(gvCustomer,“CustomerID”);
会话[SSS.CustomerID]=ICCustomerID;
}
公共班级图书馆
{
公共静态字符串gvGetVal(GridView gvGrid,字符串sHeaderText)
{
string sRetVal=string.Empty;
如果(gvGrid.Rows.Count>0)
{
如果(gvGrid.SelectedRow!=null)
{
GridViewRow行=gvGrid.SelectedRow;
int iCol=gvGetColumn(gvGrid,sHeaderText);
如果(iCol>-1)
sRetVal=row.Cells[iCol].Text;
}
}
返回sRetVal;
}
私有静态int gvGetColumn(GridView gvGrid,字符串sHeaderText)
{
int-iRetVal=-1;
对于(int i=0;i
我和你有同样的问题。我发现,当我在GridView中使用
BoundField
标记来显示数据时。
行.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>
我使用
控件
属性查找用于显示数据的
标签
控件,您可以找到自己的控件。当您找到它并转换为正确的类型对象时,您可以提取文本等。例:

string showText = lbCod.Text;
参考:

我在命名列中查找一个整数值,因此我执行了以下操作:

int index = dgv_myDataGridView.CurrentCell.RowIndex;

int id = Convert.ToInt32(dgv_myDataGridView["ID", index].Value)
这样做的好处是,列可以位于栅格视图中的任何位置,并且仍然可以获得值


干杯

试错。尝试更改索引,直到得到所需的结果。单元格[1]、单元格[2]等等……我尝试将单元格[6]和所有单元格都提供给我行索引,而不是单元格的值。还有其他建议吗?非常感谢。您可以在这里发布一些代码,以便我们知道您试图从哪种类型的单元格中提取值吗?您在
单元格[1]
中真的有值吗?我假设我有一个值,因为是第1列。不确定为什么您的所有单元格值都为空。或者,您可以为gridview设置
datakeynames=“yourprimarykey”
,并访问键值,如
TextBox1.Text=CustomerGridView.SelectedValue.ToString()
Dennis正在工作:)是的,我非常激动,请更改之前的答案,这样我就可以给您评分了。天哪,你不知道你刚从我肩上卸下了多大的压力@莉莉很高兴它现在起作用了。我已经用另一个代码更新了我的答案。这是一个窗口的表单响应,而不是ASP.net,这是Gridview的功能is@Nick罗伯茨:这对我的Windows窗体很有帮助。非常感谢你。
Label lbCod = GridView1.Rows["AnyValidIndex"].Cells["AnyValidIndex"].Controls["AnyValidIndex"] as Label;
string showText = lbCod.Text;
int index = dgv_myDataGridView.CurrentCell.RowIndex;

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