如何获取隐藏单元格的值?

3

我在我的项目中使用了gridView。

我有这个类:

public class FeatureDesc
{
    public string Title { get; set; }
    public string Tip { get; set; }
    public string ID { get; set; }
}

I create:

List<FeatureDesc> list_fd = new List<FeatureDesc>();

某个时刻,我填充了list_fd并将其设置为数据源:
gvFeatList.DataSource = list_fd;
gvFeatList.DataBind();

所有内容(标题,提示,ID)都被正确地显示并有效运行。

但是我需要隐藏用户的ID列,并且在某些时候,当我点击行以通过JavaScript函数获取所点击行的ID时。

因此,我的问题是如何获取隐藏列的文本?


针对特定的(ID)列,设置CSS样式为display:none;...这有帮助吗?您始终可以从JS中访问该列的值(例如,在每一行中设置onclick="JSFunc(this);"等),并在每次单击行后将ID存储在某个input type="hidden"字段中。 - nelek
3个回答

3
如果在代码后端隐藏了一个列,它在HTML中就不存在了。但是您可以使用CSS将其隐藏,并在单击行时获取该值。
<asp:GridView ID="gvFeatList" runat="server" AutoGenerateColumns="false" ItemType="YourNameSpace.YourClass.FeatureDesc">
    <Columns>
        <asp:TemplateField HeaderText="Title">
            <ItemTemplate>

                <%# Item.Title %>

                //in a span element
                <span style="display:none;"><%# Item.ID %></span>

                //or a hidden field
                <asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Item.ID %>' />

            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Tip">
            <ItemTemplate>

                <%# Item.Tip %>

            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

<script type="text/javascript">
    $("#<%= gvFeatList.ClientID %> tr").click(function () {
        var IDcontainer = $(this).find("span");
        alert(IDcontainer.html());
    });

    $("#<%= gvFeatList.ClientID %> tr").click(function () {
        var IDcontainer = $(this).find("input[type=hidden]");
        alert(IDcontainer.val());
    });
</script>

在这个例子中,我把ID放在一个<span>元素中。但也可以放在HiddenField、另一个列等地方。

0

不要在标记或代码中将Visible属性设置为false

Css可以解决这个问题:

将css类添加到<asp:boundfield>中,如下所示:

   <asp:BoundField ItemStyle-CssClass="hidden-col"  DataField="ID" HeaderText="ID"/>

然后在CSS中隐藏该类

 .hidden-col{
            display:none;
        }

这样,ID值将可用于您的js函数。


感谢您的帖子。当我放置BoundFields时,出现了错误:<asp:GridView ID="gvFeatList" runat="server" CssClass="table table-striped table-bordered table-hover pointer height-10"> <asp:BoundField ItemStyle-CssClass="hidden" DataField="UID" HeaderText="UID" /> </asp:GridView> - Michael
尝试使用以下代码:<asp:GridView ID="gvFeatList" runat="server" CssClass="table table-striped table-bordered table-hover pointer height-10"> <Columns><asp:BoundField ItemStyle-CssClass="hidden" DataField="UID" HeaderText="UID" /> </Columns></asp:GridView> 请注意,Boundfield 应该在 "Columns" 标签内。 - AnkitG

0

你可以绑定隐藏列的一种方式是

<asp:TemplateField>
                    <ItemTemplate>
                        <table>
                            <tr>
                                <td>
                                    <input id="btnTitle" type="button" onclick='getId(this);' value='<%# Eval("Title") %>' />
                                    <input id="hdnfldID" type="hidden" value='<%# Eval("ID") %>' />
                                    <br />
                                </td>
                            </tr>
                        </table>
                    </ItemTemplate>
                </asp:TemplateField>

而你可以通过 Javascript 获取 ID,例如

<script type="text/javascript">
    function getId(ele) {
        alert("Title : " + ele.value + "\n\rId : " + $(ele).closest('tr').find('#hdnfldID').val());
    }
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接