VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2025|回复: 16

求gridview绑定问题

[复制链接]

1

主题

11

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-11-26 22:00:01 | 显示全部楼层 |阅读模式
我有两个表
表A
audioID    audioName UserId audioRemark

表B

ID  CommTxt(留言) audioID


我想用gridview  通过UserId显示某个用户所有的audio信息

这样显示

audioName  audioRemark  countcomm(统计留的次数)


这个怎么做,用不用gridview 嵌套

看看,我下面做的,,这个有问题,,谢谢指点!!!


public int commcount;  在html里绑定这个统计字段,

private void MyCreateBind()
    {

        int uid = Int32.Parse(Session["UserId"].ToString());

        string str = "select * from UsersAudioView where UserId=" + uid;

        SqlConnection myCon = new SqlConnection(ConfigurationManager.ConnectionStrings["mysql"].ConnectionString);
        myCon.Open();

        SqlDataAdapter sda = new SqlDataAdapter(str, myCon);
        DataSet ds = new DataSet();
        sda.Fill(ds, "UsersAudioView ");
        AudioInfoGV.DataSource = ds.Tables["UsersAudioView "];
        AudioInfoGV.DataBind();
        myCon.Close();
    }


   protected void audioInfoGV_RowDataBound(object sender, GridViewRowEventArgs e)
    {



  if (e.Row.RowType == DataControlRowType.DataRow)
        {


            
           // DataList dali = (DataList)e.Row.FindControl("DataList1");
            
            Label lblvid = (Label)e.Row.FindControl("lblaudioId");
   


            string aid= lblvid.Text.ToString();

            
            string str = "select count(*)as aa from 表B where audioId='" + aid+ "'";


            SqlConnection myCon = new SqlConnection(ConfigurationManager.ConnectionStrings["mysql"].ConnectionString);
            myCon.Open();

            SqlCommand myCmd = new SqlCommand(str, myCon);

           // SqlDataAdapter sda = new SqlDataAdapter(str, myCon);
          //  DataSet ds = new DataSet();
           // sda.Fill(ds);
            SqlDataReader dr = myCmd.ExecuteReader();


            if (dr.Read())
            {

                commcount = Int32.Parse(dr["aa"].ToString());


            }
            else
            {

                commcount = 0;


            }
           // dr.Close();
           // dali.DataSource = ds;
           // dali.DataBind();
           dr.close();

        }
}
回复

使用道具 举报

0

主题

15

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-11-27 12:30:01 | 显示全部楼层
commcount  有必要么?
根据userID找到 radio 之后在前台写好就应该可以了吧
<asp:GridView ID="audioInfoGV" runat="server" AutoGenerateColumns="false" OnRowCommand="audioInfoGV_RowCommand" OnRowDataBound="audioInfoGV_RowDataBound" >
    <Columns>
         <asp:BoundField DataField="audioName" HeaderText="audio Name"/>
         <asp:BoundField DataField="audioRemark  "HeaderText="audio Remark"/>
    <Columns>
<asp:GridView>
看看 能不能达到你的要求
回复

使用道具 举报

1

主题

11

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-11-27 13:30:02 | 显示全部楼层
terrysx

我要统计这个用户的某个audio的留言条数,,

回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-11-27 23:00:01 | 显示全部楼层
在前台:<%=commcount%> 不就行了吗
回复

使用道具 举报

1

主题

11

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-11-28 10:45:01 | 显示全部楼层
<%=commcount%> 不就行了吗

用了,不行,才上这里呢
回复

使用道具 举报

0

主题

4

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-11-28 11:00:01 | 显示全部楼层
給我的感覺,你的程序在audioInfoGV_RowDataBound里面將會運行的很慢,我覺得你不需要去按每行都是查詢B表一次,這樣速度太慢了。建議:國為我不知道你要顯示的字段,所以分步處理。
DataSet ds = new DataSet();
string strA = "select * from A where UserId=" + uid;
.......
sda.Fill(ds , "A");

string strB = "select A.audioId,count(B.*) as aa from A inner join B on A.audioId = b.audioId where A.UserId = " + uid + " Group by A.audioId"
sda.fill(ds , "B");

這樣,A表與B表就是一對一的關關系,A表的留言條數就在B表的aa字段里面,並連字段為audioId。(如果A表的某個audioId在B表中沒有記錄關連,那麼它的留言記錄就是0.)
回复

使用道具 举报

1

主题

11

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-11-28 11:15:01 | 显示全部楼层
miosoul

谢谢老兄了,,呵呵,,你的想法不错,,虽然俺还没做,,
受教了!
回复

使用道具 举报

1

主题

11

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-11-28 11:45:01 | 显示全部楼层
miosoul


aa 字段,怎么绑定到gridview 上,我绑上去,,不显示
回复

使用道具 举报

1

主题

11

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-11-28 12:00:01 | 显示全部楼层
miosoul


我用
ds.Relations.Add();
VideoInfoGV.DataSource = ds.Tables["A"].DefaultView;
VideoInfoGV.DataBind();


没有留言的不显示“0”,只有留言的能显示具体的数目
回复

使用道具 举报

0

主题

4

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-11-28 12:15:01 | 显示全部楼层
那你可以A表中建一個commcount字段,類型為typeof(int),ds.Table["A"].Colums["commcount"].Default = 0;
ds.Table["B"].PrimaryKey = new new System.Data.DataColumn[]{ds.Table["B"].Colums["audioId"]};
foreach (DataRow myRow in ds.Table["A"].Rows)
{
    DataRow drB = ds.Table["B"].Find(myRow["audioId"].ToString());
    if (drB != null)
        myRow["commcount"] = drB["aa"];
    else
        myRow["commcount"] = 0;
}

加上這麼一段後,直接將A表邦定到DataGrid就可以了。
回复

使用道具 举报

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

本版积分规则

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

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