VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: vincentngacn

请解释一下刚才的一些代码 谢谢

[复制链接]

2

主题

11

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-4-26 19:15:01 | 显示全部楼层
突然间又有一个问题:
现在的只能显示一行的详细,
(也就是点击另一行的时候前面显示的那一行自然的会没有)
然后我现在想点每一行的时候都会显示详细
直到点隐藏的时候那个详细才隐藏

------------------
| id | 姓名 | 业务总成绩         |
------------------
| 1  | 小张 | 100000     |详细  |
------------------
| 2  | 小王 | 20000      |详细  |
------------------
| 软件工程 |06-01-12   | 8000    |
------------------
| 网站开发 |06-11-10   | 12000   |
------------------
| 3  | 小李 | 80000      |详细  |
------------------
| 软件工程 |06-01-12   | 8000    |
------------------
| 网站开发 |06-11-10   | 12000   |
------------------
这样的效果
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-4-26 23:30:01 | 显示全部楼层
这就是我说的另一种方式.
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-4-26 23:45:01 | 显示全部楼层
<asp:GridView AutoGenerateColumns="false"  ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound" OnRowCommand="GridView1_RowCommand">
            <Columns>
                <asp:BoundField DataField="Key" HeaderText="Key" />
                 <asp:BoundField DataField="Value" HeaderText="Value" />
                 
                 <asp:TemplateField>
                    <ItemTemplate>
                        <input type="button" value="显示" onclick="GoShowDetail(this,1);" />
                        <input type="button" value="隐藏"  onclick="GoShowDetail(this,2);" />
                    </ItemTemplate>
                 </asp:TemplateField>
               
              
            </Columns>
        </asp:GridView>

<asp:Repeater ID="rp1" runat="server">
            <HeaderTemplate>
                <table border="1">
                <tr>
                    <td>类别</td>
                    <td>时间</td>
                    <td>金额</td>
                </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <TR>
                    <td><%#Eval("A")%></td>
                     <td><%#Eval("B")%></td>
                     <td><%#Eval("C")%></td>
                </TR>
            </ItemTemplate>
            <FooterTemplate>
                </TABLE>
            </FooterTemplate>
        </asp:Repeater>




<script type="text/javascript">
function GoShowDetail(btn,i)
{
    var tr = btn.parentElement.parentElement.nextSibling;
   
    tr.style.display = (i==1)?"":"none";
}
</script>
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-4-27 00:15:01 | 显示全部楼层
后台:
去掉原来的rowcommand事件.


    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
      
        
        GridViewRow row = e.Row;
        GridViewRow NewRow = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Normal);
        NewRow.Cells.Add(new TableCell());
        NewRow.Cells[0].ColumnSpan = row.Cells.Count;
        //NewRow.Cells[0].Controls.Add(this.rp1);
        NewRow.Style.Add("display","none");

        DataTable dt = new DataTable();
        dt.Columns.Add("A", typeof(string));
        dt.Columns.Add("B", typeof(string));
        dt.Columns.Add("C", typeof(Int32));
        DataRow r1 = dt.NewRow();
        r1[0] = "软件工程";
        r1[1] = "06-01-12";
        r1[2] = 8000;
        dt.Rows.Add(r1);
        r1 = dt.NewRow();
        r1[0] = "网站开发";
        r1[1] = "06-11-10";
        r1[2] = 12000;
        dt.Rows.Add(r1);


        this.rp1.DataSource = dt.DefaultView;
        this.rp1.DataBind();



        this.GridView1.Controls[0].Controls.Add(NewRow);
        //this.rp1.RenderControl(Html32TextWriter);
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        Html32TextWriter tr = new Html32TextWriter(new System.IO.StringWriter(sb));
        this.rp1.RenderControl(tr);
        NewRow.Cells[0].Text = sb.ToString();
    }
回复

使用道具 举报

2

主题

11

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-4-27 02:45:01 | 显示全部楼层
不好意思了这样的是在加载的时候全部都加载的
可不可以在用户点击显示的时候再加载相应的记录的方法

不好意思谢谢了
回复

使用道具 举报

2

主题

11

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-4-27 06:15:01 | 显示全部楼层
晕,这条js写得真是高明要是我的话又要经div名和取div名
<script type="text/javascript">
function GoShowDetail(btn,i)
{
    var tr = btn.parentElement.parentElement.nextSibling;
   
    tr.style.display = (i==1)?"":"none";
}
</script>
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-4-27 09:00:02 | 显示全部楼层
不好意思了这样的是在加载的时候全部都加载的
可不可以在用户点击显示的时候再加载相应的记录的方法
===========
可是可以的,但比较麻烦.

要在ItemCreated事件中写,先在command中做记号,然后在command中写,
这样才能保存生成的html.
回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-4-27 10:30:02 | 显示全部楼层
他以什么来做标记呢
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-4-27 11:15:01 | 显示全部楼层
他以什么来做标记呢
=======
在ViewState中放个值吧.

个人认为一次全部显示在客户端比较好,
这样避免反复提交,
因为gridview如果带分页的rows条数有限,所以生成html代价不是很大.
回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-4-27 12:30:01 | 显示全部楼层
ViewState=""id的一串
然后在RowDataBound判断当前绑定ID是否有相同的
有就显示

然后在rowcommand中点击显示的时候添加这个ID
点击隐藏的时候删除这个ID

请问是不是这样
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表