计划表:
计划ID(PK),项目ID,员工ID,计划内容  项目内容(视图,连接到项目表)
1              1       1       XXXXXX   XXXXX
2              1       2       XXXXXX   XXX
3              1       3       xxxxxx   XXX
4              2       2       xxxxxx   XXXXX
5              2       3       xxxxxx   XXX现在我要查看项目进度,所以只需要项目ID和员工ID,要不重复的,就是说查出来要这样的结果
项目ID   项目内容
1        XXXXXXX
2        YYYYYYY虽然这样可以用SELECT distinct(项目ID),项目内容 FROM 计划表可是,我是要放在gridview中的,所以计划ID必须要写进SQL语句中,而且我需要从gridiew中中得到该行的主键值(计划ID),请问要怎么实现?我要实现的就是gridview中显示
项目ID   项目内容
1        XXXXXXX
2        YYYYYYY然后点某行,就把所有的进度在底下的datalist中显示出来

解决方案 »

  1.   

    我也把代码贴出来吧,大家帮我想想办法哦,毕业设计,急呀!!!ASPX:
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="True" OnPageIndexChanging="GridView2_PageIndexChanging" PageSize="6" BackColor="White" BorderColor="White" BorderStyle="Ridge" BorderWidth="2px" CellPadding="3" CellSpacing="1" GridLines="None" OnRowUpdating="GridView2_RowUpdating" DataKeyNames="iPlanID">
                        <Columns>
                            <asp:BoundField DataField="iProjectID" HeaderText="项目ID" />
                            <asp:BoundField DataField="sProjectName" HeaderText="项目名称" />
                        <asp:TemplateField>
                    <ItemTemplate>
                    <asp:LinkButton ID="lk1" runat="server" Text="查看" CommandName="update"
                         CommandArgument="<%#((GridViewRow)Container).RowIndex%>"></asp:LinkButton>

                    </ItemTemplate>
                    </asp:TemplateField>
                        </Columns>
              
                    </asp:GridView>
    ASPX.CSprivate void bingdata()
        {
            string connstr = System.Configuration.ConfigurationManager.AppSettings["connstring"];
            SqlConnection myconnection = new SqlConnection(connstr);
            myconnection.Open();
            string check = "select * from viewPlan";
            SqlDataAdapter da = new SqlDataAdapter(check, myconnection);
            DataSet ds = new DataSet();
            da.Fill(ds, "table");
            if (ds.Tables["table"].Rows.Count <= 0)
            {
               // Label1.Text = "暂无新项目!";
                GridView1.Visible = false;
            }
            else
            {
                GridView1.DataSource = ds;
                GridView1.DataBind();
                myconnection.Close();
            }
        } protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            string num = this.GridView1.DataKeys[e.RowIndex].Value.ToString();
            string connstr = System.Configuration.ConfigurationManager.AppSettings["connstring"];
            SqlConnection myc = new SqlConnection(connstr);
            string check = "select * from viewPlan where iPlanID='" + num + "'";
            SqlDataAdapter sda = new SqlDataAdapter(check, myc);
            DataSet ds = new DataSet();
            sda.Fill(ds, "table");
            Label1.Text= ds.Tables[0].Rows[0]["iProjectID"].ToString();
            binddata1();
        } private void binddata1()
        {
            string connstr = System.Configuration.ConfigurationManager.AppSettings["connstring"];
            SqlConnection myconnection = new SqlConnection(connstr);
            myconnection.Open(); 
            string check = "select * from viewPlan where iProjectID='"+Label1.Text+"' order by dPlanTime desc";
            SqlDataAdapter mydataadapter1 = new SqlDataAdapter(check,myconnection);
            DataSet mydataset = new DataSet();
            mydataadapter1.Fill(mydataset, "content");        DataList1.DataSource = mydataset.Tables["content"].DefaultView;
            DataList1.DataBind();
            myconnection.Close();
            //label4.Text = mydataset.Tables["content"].Rows.Count.ToString();    }
      

  2.   

    你的表没弄好。
    把 项目ID作为FK  和项目内容, 或者还有其他相关的一起分离出去做新表。
      

  3.   

    然后绑定到GridView的是你分离出去的那张表的内容, 再Inner join 原来那张表里的主键和需要的相关列。
    就可以得到相对应的你的需求了
      

  4.   

    你没理解我的意思,项目ID,员工ID都是FK,有3张表,进度表,项目表,员工表,3张表连接成视图,关键是查出来以后,同一项目的进度有很多,而我只要同一项目的只显示一行,然后点下该项目,把该项目所有的进度信息显示在datalist中
      

  5.   

    或许我没理解清楚,进度表是不是你最上面那张计划表?
    如果是,同一项目只显示一行你已经办了,那你传递项目ID到datalist不是可以得到项目信息,为什么非要传递那个
    主键计划ID。
    例如你传 项目ID 1 作为参数,查询返回所有项目ID 为1的计划内容,那就返回三条记录1              1       1       XXXXXX   XXXXX 
    2              1       2       XXXXXX   XXX 
    3              1       3       xxxxxx   XXX 然后绑到datalist就行了。
      

  6.   

    我就是问怎么同一个项目显示一行呀问题就在于,同一个项目没办法显示出1行,因为iPlanID是主键,同一个项目有很多的iPlanID,而项目ID和项目名称都是相同的。。看来你们也没理解我的意思。。
      

  7.   


    我就是想这样啊,关键是要把进度表弄到gridview中,就必须把主见也查进去,就变成select iPlanID,iProjectID,sProjectName from tbPlan
    然而这样的话是查不到同一个项目只显示一行的,而select distinct(iProjectID),sProjectName from tbPlan是无法放在gridview中的,因为缺少主键我只不想要主键,可是不加主键又出错呀
      

  8.   

    计划表: 
    计划ID(PK),项目ID,员工ID,计划内容  项目内容(视图,连接到项目表) 
    1              1       1       XXXXXX   XXXXX 
    2              1       2       XXXXXX   XXX 
    3              1       3       xxxxxx   XXX 
    4              2       2       xxxxxx   XXXXX 
    5              2       3       xxxxxx   XXX 现在我要查看项目进度,所以只需要项目ID和员工ID,要不重复的,就是说查出来要这样的结果 
    项目ID   项目内容 
    1        XXXXXXX 
    2        YYYYYYY select 项目ID ,项目内容 from 计划表 where 计划表员工ID = 员工ID  AND 计划表项目ID = 项目ID
       LZ要着效果?? 
      

  9.   

    第一次查询绑到gridview的表是项目表,而不是那张计划表,从gridview datakey或者selectedindex里得到项目ID主键作为参数传递到计划表。
    你主次关系理错了