大家帮我来看看 这个怎么弄。
delphi吧
全部回复
仅看楼主
level 7
傻孩子886 楼主
现在一头雾水[汗]
2013年02月20日 03点02分 1
level 7
傻孩子886 楼主
需求是:
1、点击一个医院 就可以添加联系人 联系方式 这些信息
2、点击一个城市 就可以添加医院名称 联系方式 联系人 等信息。
怎么写代码实现呢?
2013年02月20日 03点02分 2
level 7
傻孩子886 楼主
或者 谁能帮我讲下思路。
或者告诉我 是在click事件还是mousedown事件里写
2013年02月20日 03点02分 3
level 7
傻孩子886 楼主
[88][88][88]
2013年02月20日 03点02分 4
level 11
别click了,在treeview的change事件中,判断节点的属性,是城市,右边加载录入医院界面,是医院,右边加载录入联系人界面。
2013年02月20日 04点02分 5
加载界面。。。这个怎么弄?
2013年02月20日 04点02分
level 9
弄个PAGECONTROL,添加两个页,第一页显示添加加医院名称 联系方式 联系人...
第二页显示添加联系人 联系方式 这些信息,
然后判断用户选择的节点是城市还是医院,然后根据需要显示页,同时隐藏掉另一页!~[Love]
2013年02月20日 05点02分 6
哦 这样子。可是 我舍不得 推翻重做了。你是不知道 这颗树 建的我好辛苦。还是别人帮忙才弄好的 我怕 自己改一下 啥也改不回来呢。那啥。。。我都没学过这语言 自己最近学到的。边学边做[瞌睡] 你能不能就我的思路 帮我想想呢? 麻烦你了哈[Love]
2013年02月20日 05点02分
回复 傻孩子886 :额..我这个需求木有让你推翻重做啊!既然你二叉树都做到了,难道还获取不到树的属性和内容吗,根据属性和内容显示界面就可以了!好吧,我不太明白你哪儿不懂~[拍砖]
2013年02月20日 06点02分
回复 jiangshi9999 :跟你说实话吧 我下载了个做好的系统 人家建的树 所以我就照猫画虎 结果 需求不同 然后就卡这了。。。。我都不懂 第一次接触 树。。。那 你能不能给我一些代码做参考呢?
2013年02月20日 08点02分
回复 傻孩子886 :树形控件的OnChange事件里获取TreeView.Selected.Text; Selected就是当前选择的树节点.[抖胸]
2013年02月21日 00点02分
level 6
加油啊
2013年02月20日 13点02分 7
level 11
http://www.kuaipan.cn/file/id_48693573243109881.htm 访问密码: RKAAr6,去下载delphibbs的离线chm,新人想要找的答案,在里面几乎都有,这是dfw最后的遗产了。
2013年02月20日 14点02分 8
chm截止什么日期?
2013年02月21日 04点02分
回复 我蓝色理想 :截止07年,其实到07年,论坛已经很水了,都是炒冷饭,有价值的东西不多了~
2013年02月21日 07点02分
level 11
呵呵
2013年02月20日 14点02分 9
level 7
傻孩子886 楼主
procedure TForm7.tv1Change(Sender: TObject; Node: TTreeNode);
var s1:string;
begin
s1:=node.Text;
if tv1.Selected.Text=s1 then
begin
with dscity do
begin
active:=false;
commandtext:='';
commandtext:='select * from customer where hospital =:h';
Parameters[0].Value:=s1;
active:=true;
end;
//因为要查询所有节点 所以selecte *
r:= dscity.FieldByName('region').Text;
ci:= dscity.FieldByName('city').Text;
h:= dscity.FieldByName('hospital').Text;
c:= dscity.FieldByName('contact').Text;
t:= dscity.FieldByName('telephone').Text;
end;
end;
这是我change里的代码
@jiangshi9999
treeview.selected.text怎么写呢??
2013年02月21日 01点02分 10
2013年02月21日 01点02分
回复 傻孩子886 :额,s1:=node.Text; if tv1.Selected.Text=s1 then 这两句不需要,Selected.Text就是当前选中的节点,而且可以直接赋值![抖胸]
2013年02月21日 02点02分
回复 jiangshi9999 :[揉脸] 那selected。text 和 node.text 和 查询出来的Parameters[0].Value怎么关联呢?就是查询到的联系人和联系方式 怎么正好是自己点击的那个医院呢?
2013年02月21日 03点02分
回复 傻孩子886 :汗....都能获取到当前用户选择的树节点属性了,你不会关联查询吗....比如 select * from Table where 医院=你获取到的医院名,然后不就可以获取到该医院的什么联系方式之类的吗~[拍砖]
2013年02月21日 05点02分
level 7
傻孩子886 楼主
还有 你看这怎么搞的?
一添加反而多出重复的城市和医院了、
是建树 的时候 循环出错么?
这是代码
begin
rootnode:=tv1.items.addchild(nil,'客户');
regionnode :=tv1.items.addchild(rootnode,dscity.fieldbyname('region').AsString);
with dscity do
begin
active := false;
commandtext :='select distinct city ,hospital,telephone,contact from customer order by city';
active :=true;
end;
dscity.first;
if not dscity.eof then
for i := 0 to dscity.recordcount - 1 do
begin
citynode :=tv1.Items.addchild(regionnode,dscity.fieldbyname('city').AsString);
with dshos do
begin
active :=false;
commandtext :='select * from customer where city =:c';
Parameters[0].Value:=citynode.Text;
active :=true;
end;
if not dshos.eof then
for j := 0 to dshos.recordcount - 1 do
begin
hospitalnode:= tv1.Items.addchild(citynode,dshos.fieldbyname('hospital').asstring);
dshos.next;
end;
dscity.next;
end;
end;
2013年02月21日 04点02分 12
多了...汗...那是代码写错了吧,创建新的树节点之前你要判断一下树里有没有重复的节点,如果有就不要创建了~[汗]
2013年02月21日 05点02分
回复 jiangshi9999 :这.....代码怎么写?你帮我写写么。distinct city这个不就是消除重复么
2013年02月21日 05点02分
回复 傻孩子886 :这个地方有点小,我再下面给你写段代码你看看就知道了![Yeah]
2013年02月21日 05点02分
level 7
傻孩子886 楼主
@jiangshi9999 [Kiss] 太感谢你了[献花]
2013年02月21日 04点02分 13
不客气~[Love]
2013年02月21日 05点02分
level 9
额...把IsExist: boolean;这句去掉吧![汗]
2013年02月21日 05点02分 15
这句不要理会,我删除了,看楼下就好![拍砖]
2013年02月21日 05点02分
level 9
procedure TMainFrm.AddTreeNode(Text: string);
var i: integer;
begin
for I := 0 to tv1.Items.Count - 1 do
begin
if tv1.Items[i].Text = Text then
Exit;
end; tv1.Items.addchild(XXXXXXXXX);
end;
2013年02月21日 05点02分 16
AddTreeNode[拍砖]我一直在纠结怎么在change里加代码
2013年02月21日 06点02分
回复 傻孩子886 :额....OnChange事件里的代码就是为了获取Selected.text的,然后再根据它查询出该医院的其他内容![汗]
2013年02月21日 06点02分
回复 jiangshi9999 :那比如直接获取到子节点 还要查询出其所有的父节点么? 你要不加我QQ吧 拜托啦 我刚接触delphi 代码 还是很吃力的 你帮我看看吧[不要] 拜托啦 449290579 验证随便输吧
2013年02月21日 06点02分
回复 傻孩子886 :额....上班时间我上不了QQ,OnChange事件里获取的Selected.text不分什么父节点和子节点,所有节点,只要用户选择了,就能获取到该节点的属性,跟它的什么子节点父节点毫无关系![汗]
2013年02月21日 06点02分
level 7
傻孩子886 楼主
获取到的医院名,然后不就可以获取到该医院的什么联系方式之类的吗
这.............
@jiangshi9999
2013年02月21日 06点02分 17
对啊,直接根据Selected.text(这不就是医院名吗),然后执行select * from Table where hospital = selected.text(当前医院名) 其他信息不就出来了吗!然后显示在界面上就OK了....这......有咩问题![汗]
2013年02月21日 06点02分
回复 jiangshi9999 :哦 对。
2013年02月21日 06点02分
level 7
傻孩子886 楼主
procedure TForm7.btnAppendClick(Sender: TObject);
begin
with dscity do
begin
active := false;
commandtext :='select contact,telephone from customer where hosital=:h ';
active :=true;
end;
dscity.APPEND;
dscity.fieldbyname('contact').text:=dbedt1.text;
dscity.fieldbyname('telephone').text:=dbedt2.text;
dscity.fieldbyname('city').text:=ci;
dscity.FieldByName('hospital').Text:=h;
dscity.edit;
dscity.post;
drawtree;
end;
这是添加按钮的代码
2013年02月21日 06点02分 18
额......后面引用AddTreeNode(刚才我给你写的那个函数),不就把新记录加到树里了吗![汗]
2013年02月21日 06点02分
level 7
傻孩子886 楼主
begin
if tv1.Selected.Text= Node.Text then
begin
with dscity do
begin
active:=false;
commandtext:='';
commandtext:='select * from customer where hospital =selected.text'; Parameters[0].Value:=Node.Text;
active:=true;
end;
r:= dscity.FieldByName('region').Text;
ci:= dscity.FieldByName('city').Text;
h:= dscity.FieldByName('hospital').Text;
c:= dscity.FieldByName('contact').Text;
t:= dscity.FieldByName('telephone').Text;
end;
end;
这是change事件代码
2013年02月21日 06点02分 19
level 7
傻孩子886 楼主
r:= dscity.FieldByName('region').Text;
------------------------------------------
dscity.fieldbyname('telephone').text:=dbedt2.text;
dscity.fieldbyname('city').text:=ci;
我不理解这两个事件里这两段代码 总觉得不恰当 但说不出来
@jiangshi9999
2013年02月21日 06点02分 20
确实不对,应该是dscity.fieldbyname('telephone').AsString := dbedt2.text;[拍砖]
2013年02月21日 06点02分
回复 jiangshi9999 :嗯 我再试试[感动]太感谢你了
2013年02月21日 06点02分
回复 傻孩子886 :我给你介绍个DELPHI群吧,群号是:187786291 就说是程序哥介绍你进来的!这里面虽然人不多,但是高手比较多,也比较活跃![Love]
2013年02月21日 07点02分
回复 jiangshi9999 :[Kiss]太好了!!!程序哥[献花] 再帮我看看 快好了好像
2013年02月21日 07点02分
level 9
你这个Changge代码严重不对....我给你改了.
begin
with dscity do
begin
active:=false;
commandtext:='';
commandtext:='select * from customer where hospital =''' + tv1.Selected.Text + '''';
active:=true;
end;
r:= dscity.FieldByName('region').Text;
ci:= dscity.FieldByName('city').Text;
h:= dscity.FieldByName('hospital').Text;
c:= dscity.FieldByName('contact').Text;
t:= dscity.FieldByName('telephone').Text;
end;
2013年02月21日 06点02分 21
level 7
傻孩子886 楼主
[花痴]
begin
with dscity do
begin
active := false;
commandtext :='select contact,telephone from customer where hosital=:h ';active :=true;
end;
dscity.APPEND;
dscity.fieldbyname('contact').AsString:=dbedt1.text;
dscity.fieldbyname('telephone').AsString:=dbedt2.text;
dscity.fieldbyname('city').text:=ci;
dscity.FieldByName('hospital').Text:=h;
dscity.edit;
dscity.post;
drawtree;end;
这样就好了么?
dscity.fieldbyname('city').text:=ci;
dscity.FieldByName('hospital').Text:=h; 不多余?
@jiangshi9999
2013年02月21日 07点02分 22
额...那得根据你的代码需要了,我不清楚啊,汗!另外dscity.fieldbyname('city').AsString := ci;不要用.Text,虽然不知道会不会有错误发生,但是至少不规范![汗]
2013年02月21日 07点02分
回复 jiangshi9999 :asstring是什么意思呢?
2013年02月21日 07点02分
回复 傻孩子886 :就是把数据库里提取的值按照String类型提取出来![抖胸]
2013年02月21日 07点02分
回复 jiangshi9999 :搜噶
2013年02月21日 07点02分
1 2 尾页