ICallbackEventHandler接口实现多级联动

从一位老兄的Blog上看到了这个,可是代码却不太全(至少我这里看不全)。于是想办法补充了一点:
1、客户端脚本:

 1   function  CallServer()
 2   {
 3  var product = "测试";
 4  <%= ClientScript.GetCallbackEventReference(this"product""ReceiveServerData",null)%>;
 5 }

 6  
 7   function  ReceiveServerData(rValue)
 8   {
 9  alert(rValue);
10  window.location.reload();
11  var tt=document.getElementById("TextBox1");
12  alert(tt.DataSource);
13 }

14  
15   function  selectChange(e)
16   {
17  for(var i=0;i<e.options.length;i++)
18  {
19   if(e.options[i].selected==true)
20   {
21    selectSon(e.options[i].value); break;
22   }

23  }

24 }

25  
26   function  selectSon(e) 
27   {
28  <%= ClientScript.GetCallbackEventReference(this"e""ReceiveServerData",null)%>;
29 }

30  
31   function  ReceiveServerData(rValue)
32   {
33  var son=form1.elements["SelSon"];
34  var s=rValue.split("|");
35  son.length=s.length;
36  for(var i=0;i<s.length-1;i++)
37  {
38   son.options[i+1]=new Option(s[i],s[i]);
39  }

40 }

41   // ///////////////////
42   function  selectChangeSon(e)
43   {
44  for(var i=0;i<e.options.length;i++)
45  {
46   if(e.options[i].selected==true)
47   {
48    select(e.options[i].value); break;
49   }

50  }

51 }

52  
53   function  select(e)
54   {
55  <%= ClientScript.GetCallbackEventReference(this"e""hello",null)%>;
56 }

57  
58   function  hello(rValue)
59   {
60  var child=form1.elements["Sel"];
61  var s=rValue.split("|");
62  child.length=s.length;
63  for(var i=0;i<s.length-1;i++)
64  {
65   child.options[i+1]=new Option(s[i],s[i]);
66  }

67 }

68 </ script >
2、aspx页面代码
 1  < select  id ="SelParent"  runat ="server"  onchange ="selectChange(this)" >
 2      < option  selected ="selected"  value ="0" > 请选择  </ option >
 3     </ select >
 4     < br  />
 5     < select  id ="SelSon"  runat ="server"  onchange ="selectChangeSon(this)" >
 6      < option  selected ="selected"  value ="0" > 请选择  </ option >
 7     </ select >
 8     < br  />
 9     < select  id ="Sel" >
10      < option  selected ="selected"  value ="0" > 请选择 </ option >
11     </ select >
3、服务器端代码
  1  OracleConnection conn  =   new  OracleConnection( " Data Source=?;UID=?;PWD=? " );
  2
  3
  4      protected   void  Page_Load( object  sender, EventArgs e)
  5
  6      {
  7
  8        ParentBind();
  9
 10    }

 11
 12
 13      private   string  resualt;
 14
 15
 16      private   void  ParentBind()
 17
 18      {
 19
 20        string str = "select distinct(CID) from multimenu order by cid";
 21
 22        DataSet ds = ExecuteSql4Ds(str);
 23
 24        SelParent.DataSource = ds;
 25
 26        SelParent.DataTextField = "cid";
 27
 28        SelParent.DataBind();
 29
 30    }

 31
 32      private   string  SonBind( string  e) // 绑定第二级
 33
 34      {
 35
 36        string str = "select distinct(CCID) from multimenu where CID=" + e;
 37
 38        DataSet ds = ExecuteSql4Ds(str);
 39
 40        string s = "";
 41
 42        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
 43
 44            s += ds.Tables[0].Rows[i][0+ "|";
 45
 46        return s;
 47
 48    }

 49
 50  
 51
 52      private   string  ChildBind( string  e) // 绑定第三级
 53
 54      {
 55
 56        string str = "select distinct(CCCID) from multimenu where CCID=" + e;
 57
 58        DataSet ds = ExecuteSql4Ds(str);
 59
 60        string s = "";
 61
 62        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
 63
 64            s += ds.Tables[0].Rows[i][0+ "|";
 65
 66        return s;
 67
 68    }

 69
 70  
 71
 72      private  DataSet ExecuteSql4Ds( string  str)
 73
 74      {
 75
 76        OracleCommand cmd = new OracleCommand(str, conn);
 77
 78        OracleDataAdapter da = new OracleDataAdapter(cmd);
 79
 80        DataSet ds = new DataSet();
 81
 82        da.Fill(ds);
 83
 84 
 85
 86        return ds;
 87
 88    }

 89
 90      void  ICallbackEventHandler.RaiseCallbackEvent(String eventArgument)
 91
 92      {
 93
 94        if (eventArgument.Length == 1)//绑定第二级,我的数据库里分别是用1,11,111来代表三级,所以长度为一的就是一级,大家可以根据自己的需要把修改
 95
 96        {
 97
 98            string eventArgument1 = SonBind(eventArgument);
 99
100            resualt = eventArgument1;
101
102        }

103
104        else
105
106        {
107
108            string eventArgument2 = ChildBind(eventArgument);
109
110            resualt = eventArgument2;
111
112        }

113
114    }

115
116      string  ICallbackEventHandler.GetCallbackResult()
117
118      {
119
120        return resualt;
121
122    }

4、数据库脚本

 1  create   table  MULTIMENU
 2  (
 3    ID     NUMBER ( 2 not   null ,
 4    CID    NUMBER ( 2 not   null ,
 5    DSCT   VARCHAR2 ( 30 not   null ,
 6    CCID   NUMBER ( 2 ),
 7    CCCID  NUMBER ( 3 )
 8  )
 9 
10 

你可能感兴趣的:(callback)