你在父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(); }
HOHO~!这位兄弟强的啊,虽然很是看不懂,但是感觉好像就是这样的啊~!^_^ 厉害 不过有问题不明白呀 FinishProductionInfo info = new FinishProductionInfo();这句是在干嘛? 子list绑定的数据集是根据sql的select来的,你那里好像没的啊?
我把你的程序改成这样,但是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:
string sqlSel = "select * from Job where exist = 1 and dept = "+'"+finishid+"';
string sqlSel = "select * from Job where exist = 1 and dept = '"+finishid+"';这回对了
至于子datalist的问题你可以在父datalist点击的时候用程序重画一个datalist,然后放到你的展开的父datalist中(datagrid中是这样做的,datalist应该也可以)
或者先建立好主从的datalist,在itemcreate时将子表进行绑定。
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();
}
不过有问题不明白呀
FinishProductionInfo info = new FinishProductionInfo();这句是在干嘛?
子list绑定的数据集是根据sql的select来的,你那里好像没的啊?
我的想法是要得到父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:
问题应该不是这里(跟我开始想的一样)!!出错的时候是在
行 72: list.DataSource = DS2; 这里~!DS2里面的Item是空的这个让我很奇怪~!说是无法查找到数据还是谢谢UP的兄弟~!
应该正常吧?不过为什么dept = 2 而不是 1 呢??
不懂呀~!
上面这句是我自己的逻辑类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
这句上
然后单步调试
看看每行的sql都是什么
然后拿到查询分析器里看看对不对
一般这种sql得错误很容易的发现的
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
这句的productlist这个是????第二:string finishid = ((DataRowView)e.Item.DataItem).Row["ID"].ToString();
Row["ID"]当中的ID是??是子list的ID吗??
这个list不是新建的吗???ID不是就是list?还是list当中的item??不过那也是空的啊希望解决这两个疑问,呵呵,谢谢
意思是获取这个控件的值.string finishid = ((DataRowView)e.Item.DataItem).Row["ID"].ToString();
应该这样写吧..
string finishid = ((DataRowView)e.Item.DataItem).Row[0]["ID"].ToString();
为表中的ID这个字段..0为第一行..依次类推..
吧..
2是因为你查出了几条..你的变量里放的是最后一条.
你的SQL可以执行吗>在没在command下试一试?