父datalist是显示部门,现有的岗位信息(只是列出岗位名称)。子datalist就是用来显示该部门中有的岗位名称(还要横着放),岗位信息是要根据部门信息来的,那子datalist在sql选择的时候怎么得到现在是哪个部门呢??这种问题是怎么解决啊?还有就是datalist怎么横着放啊???

解决方案 »

  1.   

    datalist横着放可以设置RepeatColumns属性,它是指你的列数
    至于子datalist的问题你可以在父datalist点击的时候用程序重画一个datalist,然后放到你的展开的父datalist中(datagrid中是这样做的,datalist应该也可以)
    或者先建立好主从的datalist,在itemcreate时将子表进行绑定。
      

  2.   

    你在父datalist得OnItemDataBound事件中绑定子datalist就可以了
    datalist得RepeatColumns属性可以设置你想显示的列数<asp:DataList ID="displayInfoList" runat="server" CellPadding="4" RepeatColumns="1" Width="100%" OnItemDataBound="displayInfoList_DataBound">
    </asp:DataList>public void displayInfoList_DataBound(object sender, DataListItemEventArgs e)
    {
    DataList list = new DataList();
    list = (DataList)e.Item.FindControl("productlist");//子list得id

    DataSet DS = new DataSet();
    FinishProductionInfo info = new FinishProductionInfo();
    string finishid = ((DataRowView)e.Item.DataItem).Row["ID"].ToString();//根据父list绑定子list,得到父list得该行的id
    DS = info.GetProduct(finishid);
    DataView dv = new DataView(DS.Tables[0]);
    list.DataSource = dv;
    list.DataBind();
    }
      

  3.   

    HOHO~!这位兄弟强的啊,虽然很是看不懂,但是感觉好像就是这样的啊~!^_^  厉害
    不过有问题不明白呀 
    FinishProductionInfo info = new FinishProductionInfo();这句是在干嘛?
    子list绑定的数据集是根据sql的select来的,你那里好像没的啊?
      

  4.   

    我把你的程序改成这样,但是DS2就没用了~!问题出在哪里呢??
    我的想法是要得到父list的id,然后根据这个id从job表中找出属于该部门的所有岗位
    既然你的程序里面已经得到了父list的点,那么我这样为什么会出错呢??
    DataList list = new DataList();
    list  = (DataList)e.Item.FindControl("productlist"); DataSet DS2 = new DataSet();
    // FinishProductionInfo info = new FinishProductionInfo();
    string finishid = ((DataRowView)e.Item.DataItem).Row["ID"].ToString();//根据父list绑定子list,得到父list得该行的id
    // DS = info.GetProduct(finishid);
    // DataView dv = new DataView(DS.Tables[0]);
    string sqlSel =  "select * from Job where exist = 1 and dept = "+finishid;
    DS2 = service.GetDataset(sqlSel);
    list.DataSource = DS2;
    list.DataBind();错误如下:
    行 70:  string sqlSel =  "select * from Job where exist = 1 and dept = "+finishid;
    行 71:  DS2 = service.GetDataset(sqlSel);
    行 72:  list.DataSource = DS2;
    行 73:  list.DataBind();
    行 74:
     
      

  5.   

    string sqlSel =  "select * from Job where exist = 1 and dept = "+'"+finishid+"';
      

  6.   

    string sqlSel =  "select * from Job where exist = 1 and dept = '"+finishid+"';这回对了
      

  7.   

    谢谢这位兄弟!!
    问题应该不是这里(跟我开始想的一样)!!出错的时候是在
    行 72:  list.DataSource = DS2;  这里~!DS2里面的Item是空的这个让我很奇怪~!说是无法查找到数据还是谢谢UP的兄弟~!
      

  8.   

    根踪一下吧..看看你的sql都查出什么来了..
      

  9.   

    "select * from Job where exist = 1 and dept =2"
    应该正常吧?不过为什么dept = 2 而不是 1 呢??
    不懂呀~!
      

  10.   

    FinishProductionInfo info = new FinishProductionInfo();
    上面这句是我自己的逻辑类string finishid = ((DataRowView)e.Item.DataItem).Row["ID"].ToString();
    这句根据父list绑定子list,得到父list得该行的id,ID就是你需要绑定子list得值DS = info.GetProduct(finishid);
    这句是根据父list得到子list得DS如果你改的话,应该这样
    string id = ((DataRowView)e.Item.DataItem).Row["ID"].ToString();
    DataSet DS = GetDS(id);
    //根据ID得到DS,自己写个方法吧,就是类似于sql = "select * from table where id="+id;
    //然后把这个sql填充到dataset
      

  11.   

    把断点设在DS2 = service.GetDataset(sqlSel);
    这句上
    然后单步调试
    看看每行的sql都是什么
    然后拿到查询分析器里看看对不对
    一般这种sql得错误很容易的发现的
      

  12.   

    string id = ((DataRowView)e.Item.DataItem).Row["ID"].ToString();
    DataSet DS = GetDS(id);
    //根据ID得到DS,自己写个方法吧,就是类似于sql = "select * from table where id="+id;
    //然后把这个sql填充到dataset
    ///////////////////////////////////////////////////////////////////////////////////这个不就是我用的方法吗???DataList list = new DataList();
    list  = (DataList)e.Item.FindControl("productlist");
    DataSet DS2 = new DataSet();string finishid = ((DataRowView)e.Item.DataItem).Row["ID"].ToString();//得到父list的ID
    string sqlSel =  "select * from Job where exist = 1 and dept = "+finishid;//构造根据父list的ID得到DataSet的SQL语句
    DS2 = service.GetDataset(sqlSel);//得到DS2
    list.DataSource = DS2;
    list.DataBind();//list数据源绑定但是好像有错的啊~!    -_-|||具体错误如下:未将对象引用设置到对象的实例。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
    行 72:  string sqlSel =  "select * from Job where exist = 1 and dept =" +finishid;
    行 73:  DS2 = service.GetDataset(sqlSel);
    行 74:  list.DataSource = DS2;   <------这行错误了!!!!!!
    行 75:  list.DataBind();
    行 76: 
     源文件: c:\inetpub\wwwroot\yuanbang\job.aspx.cs    行: 74
      

  13.   

    我对的程序还有两点疑问~!第一:list  = (DataList)e.Item.FindControl("productlist");
    这句的productlist这个是????第二:string finishid = ((DataRowView)e.Item.DataItem).Row["ID"].ToString();
    Row["ID"]当中的ID是??是子list的ID吗??
    这个list不是新建的吗???ID不是就是list?还是list当中的item??不过那也是空的啊希望解决这两个疑问,呵呵,谢谢
      

  14.   

    productlist 是ID..
    意思是获取这个控件的值.string finishid = ((DataRowView)e.Item.DataItem).Row["ID"].ToString();
    应该这样写吧..
    string finishid = ((DataRowView)e.Item.DataItem).Row[0]["ID"].ToString();
    为表中的ID这个字段..0为第一行..依次类推..
      

  15.   

    还有你那个sql我觉着还是有点问题..应该是"select * from Job where exist = 1 and dept ='2'"
    吧..
    2是因为你查出了几条..你的变量里放的是最后一条.
    你的SQL可以执行吗>在没在command下试一试?
      

  16.   

    问题已经基本解决了啊~!谢谢 jackywang1(jacky)这个大哥,呵呵~!给分喽,反正也拿不回来了