有没有办法在DataGrid根据当前行的内容(某个键值)在别的数据表再进行搜索得出结果(此结果是多个值),注意,每个行都要自动搜索,而且一并显示在此DadaGird的模板列中想了一整天,也不知道怎么办,解决了100分送上,决不食言!

解决方案 »

  1.   

    在ItemDataBind的时候可以得到“当前行的内容(某个键值)”,然后根据这个再去读取数据库,得到数据,绑定在你的模板列上。没试过,觉得行,有问题再讨论。
      

  2.   

    然后根据这个再去读取数据库就是怎样触发这个事件?而且要知道的问题就是这个事件要写在DataGrid的Bind之后,但是每行的模板列的内容都不一样啊.....Bind过之后,怎样确保模板列里面的内容对应上当前行呢?当时我就想放个DropDownList去显示内容,但发现我没有办法区别开各个DropDownList,实在是头痛啊...
      

  3.   

    不是很清楚你的意思,每一行的标识不是可以用DataKey来区分吗?
      

  4.   

    就是怎样触发这个事件?
    ——————————————————————
    这个你可以注册DataGrid的ItemDataBind事件啊
      

  5.   

    to  wyg5307(蓝白) 
    Bind完之后能区分Datakey但区分不了每排DropDownListto skytear() 
    有没有这个的例子?MSDN上关于这个事件的好像都是移动控件的
    以前都是整个DataGrid绑定的,还真没见过逐个ItemBind的
      

  6.   

    ItemDataBind可以在InitializeComponent里面
    this.dgmargin.ItemDataBound += new (后面的自动会产生,记不清楚了)
      

  7.   

    注册了ItemDataBound事件了,改事件的过程出错,还是好像没有办法区别出各个行的DropDownList
    未将对象引用设置到对象的实例。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
    行 138: cmdSelect2.Parameters.Add("@strItemID" , strItemID);
    行 139: dtrAuthor=cmdSelect2.ExecuteReader();
    行 140: dropAuthor.DataSource=dtrAuthor;
    行 141: dropAuthor.DataBind();
    行 142: cn2.Close();
     
      

  8.   

    你这种方式太没有效率了.
    正确的做法,应该是在SQL里面进行构造
    你可先在数据库中写一个函数,此函数根据某ID求取相应的数据(多行),并且取得多行数据形成带格式的文本串(比如用逗号隔开),然后,在SQL里面就可直接调用,比如
    sql = "select id,title,getstr(id) content from table";如此,直接求取出来,直接进行绑定,事情就变得简单多了.还有一种方法,那就是在页面中绑定进行求取.
    比如你在某个LABEL中进行如下绑定
    <asp:Label Text='<%# getstr(DataBinder.Eval(Container.DataItem, "id").ToString()) %>' runat=server></asp:Label> 
    然后在后台代码里面,写一个getstr(string id)函数,这样,也可以
      

  9.   

    你可先在数据库中写一个函数,此函数根据某ID求取相应的数据(多行),并且取得多行数据形成带格式的文本串(比如用逗号隔开)其实我早想过如此,但是就是不知道这个SQL过程如何操作,何否详尽解释一下?只怪SQL学得不太深,不好意思!ps:刚刚用了最麻烦的方法,终于做出来了,在模板列绑定了个DropDownList,然后每次DataItemBound都findcontrl它,再搜索,绑定DDList,我也觉得这方法很不好,白白要多搜索一次,而且我还有个模板列是查看详细信息的,一查看,那个多值的字段也是要多搜索一次才能出来,确实太没有效率了,有兴趣想用上面的方法,望指教了!分我会给足的,反正有的是分...谢谢!
      

  10.   

    楼主是不是想把两个表的数据绑定在一个DadaGird中?
    如果是的话
    解决的方法是在后台写select语句的时候,用sql语句选择两个表的数据不是就行了吗?然后在绑定在DataSet里面形成一个新的表显示在DadaGird中!
      

  11.   

    表1
    论文号 论文名字表2
    论文号 作者ID表3
    作者ID 作者名字给你个大概例子吧,当然也可以不按这个写,反正我看得懂就行,一个论文可以由多个作者合作的,我自己写的搜索语句如下
    select 作者姓名
    FROM (论文信息 inner join 论文发表
          ON 论文信息.序列号 = 论文发表.序列号)
         inner join 作者信息
         ON 作者信息.ID = 论文发表.ID
         where 论文信息.序列号=@selectItemID
    如果用你的方法,上面的作者姓名当然要改成*啦,主要帮我解决作者姓名字段的值搜索出来之后怎样用分隔符号隔开就行了
    我要上学去,回来再看了,谢谢!
      

  12.   

    to  ycrw(隐藏人物) 
    这样搜索出来的结果,相同的论文如果有2个作者,就会变成2项,这样明显不对的,我要把2个作者放在一起,同一个论文只能有一项,所以是比想象中麻烦一点的
    因此我尝试了用序列号值再搜索一次,虽然麻烦,但也算成功了...
    正在学习找个符号分隔中,我想这种办法也不错
      

  13.   

    下面是一个ORACLE数据库里面的函数,实现的就是楼上要求的这种效果.create or replace function f_GetCodeNameByID(scod_id IN VARCHAR2) return varchar2 is
    l_Result varchar2(32767);
    BEGIN
         --根据所传递的事故报表代码ID获取带逗号分隔的事故报表代码名称
         FOR x IN (SELECT cod_name FROM rpt_code WHERE cod_id IN(scod_id)) LOOP
             l_Result := l_Result || ',' || x.cod_name;
         END LOOP;     l_Result := substr(l_Result, 2);
    return(l_Result);
    end f_GetCodeNameByID; 你可参考SQLSERVER里面的写法,或去问数据库版的人求取此种类似写法.