使用 LinkBut​​ton 单元格从 GridView 行中提取文本

Extract Text from a GridView row with LinkButton Cells

我正在尝试从类型为 -

的 Gridview 行中提取文本

| text1 | text1 | LinkButtonText3 | text4 |

我使用相同的代码块从每一行单元格中提取文本,但未能获得 LinkButtonText3,因为它的文本字段具有 null 值。

for (int i= 0; colIdx < gv.Columns.Count; i++) {
   dict.Add(arr[i], row.Cells[i].Text);
}

此外,我尝试格式化行控件并更改具有 LinkBut​​ton 控件的单元格,但没有成功

/*formatRow(row in gv.Rows) called this method before the previous for loop executes; */

static void formatRow(Control c)
{
        for (int i = 0; i < c.Controls.Count; i++)
        {
            Control curr = c.Controls[i];
            if (curr is LinkButton)
            {
                c.Controls.Remove(curr);
                c.Controls.AddAt(i, new LiteralControl((curr as LinkButton).Text));
            }
        }
}

但这没有成功。我正在尝试找出一种方法来格式化 LinkBut​​tonCell 并通过对行中所有单元格的一致引用来访问它的文本。 (row.Cells[i].Text)

在按钮单击事件中执行此操作。 首先我们得到按钮发送者

Button YourButtonHere = (Button)sender;

然后我们抓取按钮被点击的行。

        GridViewRow gvr = (GridViewRow)YourButtonHere.NamingContainer;

然后我们制作一个标签,我们在其中存储您的行的标签,您可以对网格中的所有标签执行此操作。 图片 ID_Label_Item 是您的网格的标签,您可以在其中显示值。

Label ID_Label_Item = (Label)gvr.FindControl("ID_Label_Item");

通过您创建的 ID_Label_Item,您可以在单击按钮的特定行中获得信息,您可以自由地对 gridview 的所有字段执行此操作。 祝你有美好的一天。希望我能帮到你。

不清楚您是在寻找点击事件,还是在点击 link 按钮时寻找 运行 代码(并且不确定为什么标准 ASP.NET 按钮没有被用在这里???)。

无论如何,这是怎么回事?

对于数据绑定和默认(自动生成列),这些值和列放置在 .cells[] 集合中。

但是,对于任何模板化控件,您都必须使用查找控件。 (实际上 - 它至少会对 post 几行 gridview 标记有所帮助)。

至于格式化 gridview,我非常非常建议您使用行数据绑定事件。这有 100 多个原因,但一个真正重要的原因是您不仅有 gridview 行,而且还有用于绑定的数据行(这意味着您可以使用数据源中的列甚至不显示在网格中——通常这些额外的列对于格式化您显示的 columns/data 非常方便。并且通过使用行数据绑定事件,您也不必编写额外的循环来格式化。

无论如何,假设您的网格视图具有模板化字段,可以这样说:

<asp:TemplateField>
    <ItemTemplate>
        <asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>

然后一个标准循环代码 get/use/have/change/format/play/have 在每个网格行的处理循环中使用 link 按钮很有趣?

这个:

foreach(GridViewRow gvR in GridView1.Rows)
{
    LinkButton lBtn = (LinkButton)gvR.FindControl("LinkButton1");

    if (lBtn.Text == "test")
    {
        // bla bla bla
    }
}

所以自动生成列或数据绑定列?它们出现在 cells[] 集合中。但是,文本框、按钮、链接按钮等标准控件无疑会按照上述方式放入网格中(在 templateField 块中,并且按照上述方式 fetched/used 和 findcontrol。