ASP.NET GridView只显示一个单元格

时间:2011-10-20 06:39:21

标签: c# asp.net gridview

我有一个GridView,其ButtonField类型为link

 <asp:ButtonField ButtonType="Link" CommandName="more" HeaderText="Name Expands" DataTextField="name" />

当按下buttonField时,我想在下一列中显示一个额外的单元格。但我不想显示整个列,只显示该列上属于该行的单元格。

所以我创建了以下

protected void gv2_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "more")

和e.CommandArgument告诉我按下的行数

如果现在我说“gv2.Columns [3] .Visible = true;整个额外列都可见,这里我只想显示该列中的一个单元格。

如果我说:

gv2.Rows[Convert.ToInt32(e.CommandArgument)].Visible = true;   

然后带有我想要的字段的额外列保持不可见。

我该怎么做?

非常感谢!

2 个答案:

答案 0 :(得分:1)

当列的visibility属性设置为false时,

ts无法使单元格可见。所以只显示相邻的细胞可见。

你可以使用类型模板字段的唯一一列,然后在该模板字段中创建一个表,并将电子邮件的td设置为可见的false和网格的行命令,因为之前的答案使得标签可见,你应该让你的td可见。

public class Demo
    {
        public string Dept { get; set; }
        public string Email { get; set; }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<Demo> list = new List<Demo>()
            {
                    new Demo() { Dept="A", Email="a@a.com" },
                    new Demo() { Dept="B", Email="b@b.com" },
            };

            GridView1.DataSource = list;
            GridView1.DataBind();
        }

    }
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "cmd")
        {
            GridViewRow row = (e.CommandSource as LinkButton).NamingContainer as GridViewRow;
            Label email = row.Cells[1].FindControl("email") as Label;
            email.Visible = true;

        }
    }

答案 1 :(得分:0)

我还没有办法做到这一点。相反,我选择创建另一个看不见的gridview“gv2”。当用户单击其中一个按钮字段时,在RowCommand函数中,我抓住我需要的信息并将其放在不可见的网格+我想要显示的单元格上。

因为我正在使用带有“更新面板”的AJAX,所以看起来并不太糟糕。(这是我的看法)

在这里,您可以看到它的外观http://www.nicoteksolutions.com/Forms/feed.aspx

谢谢! 尼科