×

Loading...
Ad by
  • 予人玫瑰,手有余香:加拿大新天地工作移民诚聘求职顾问&行业导师!
Ad by
  • 予人玫瑰,手有余香:加拿大新天地工作移民诚聘求职顾问&行业导师!

你再看看我这里的code。实际上是把这个button的功能全附加到其他的column上,所以当你点其他column时候,就象点select一样。

public void dgidList_ItemDataBound(object sender, DataGridItemEventArgs e)
{
ListItemType itemType = e.Item.ItemType;
if ((itemType == ListItemType.Pager) ||
(itemType == ListItemType.Header) ||
(itemType == ListItemType.Footer))
{
return;
}
LinkButton button = (LinkButton)e.Item.Cells[0].Controls[0];
e.Item.Cells[1].Attributes["onclick"] =
Page.GetPostBackClientHyperlink(button, "");
e.Item.Cells[2].Attributes["onclick"] =
Page.GetPostBackClientHyperlink(button, "");

}
Report

Replies, comments and Discussions:

  • 工作学习 / IT技术讨论 / 一个问题关于ASP.NET
    我在用ASP.NET server control中的datagrid显示数据库里的数据。为什么我的程序run起来以后,那个datagrid就像一个plain table一样,既没法编辑,也没法利用arrow键将光标在行与行之间滚动,这是怎么回事?哪位知道?谢谢!
    • 急!!!!!!!!!!
    • 需要设置一些PROPERTIES, 建议你直接GOOGLE。
      • 每个property都看过了,没有象AllowEditing这样的property。GOOGLE也试过了,MSDN也试过了,没有找到有用的信息。
        • 难道我理解错拉? 看看这个连接
          • 我想要的效果是有点象excel那样的,可以highlight某一整行,然后用带上下箭头的键,可以在每行间上下滚动。
            • 做过类似的好象, 就是在GOOGLE上找的离子。
              • 我找了,就是找不到
    • 急!!!!!555555555555555~~~~
    • 不清楚你遇到了什么样的麻烦,这有个例子不知能否有帮助:A Truly Excel-like Grid Control http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data02142002.asp
      • 这个也不是我想要的5555555~~~~~~~
    • 标准的web datagrid就是这样的啊,你说的那样的datagrid微软的是不可以的,如果你一定要这样的,试一下Infragistics的grid,不过这个不是free的。
      • 我以前用delphi编stand-alone的应用程序,那里遍的datagrid就是我想要的那个样子。我现在还想要那样的,微软怎么这么笨啊,连这个都没有。555555~~~
        • faint! application里的datagrid当然是那样的啊,微软的win.net里面的也是啊,这个是web based,机制都不一样
          • 那怎么办啊?怎样实现stand-alone application里的那种功能?
      • 我知道有一些第三方控件(比如 developer express)是可以做到的,但是都不免费。
    • you should add an 'Edit/Update/Cancel' button column to the grid then create the event handlers, and write update code in yourgrid_update event.
      • 实际上,我的问题是:我有10个table,后边9个与第一个都是master-detail的关系,第一个table里被选中的row决定了后边9个table里的内容,所以,我需要能灵活地选中第一个表里的row,你说我该怎么做啊?
        • 一样啊。你可以在edit event里写一段程序把得到选中行的参数传给其他九个tables,然后databind(), 刷新页面。
          • 问题是,我怎么拿到这个“选中行”啊,没办法让光标在datagrid里上下滚动啊。555555555~~~~
            • 着是我学NET的时候用的离子, 选,就有你要的例子Server-Side Data Access
              • 这个tutorial我也看过,那里边的Master-Detail Relationships 只是在两个表间,从master table里用一个hyperlink column就连到detail table上了,可是我的detail table不只一个啊,而且还是在不同的page上。
                • 妹妹, 这么复杂的功能估计现成的CODE比较罕见的说。 我们最后其实都没用这么烦琐的截面, 就用LINK连到DETAIL SCREEN了。
                  • 姐姐,我觉得不应该很复杂的,我只要能取出来selectedItem,然后把它存在一个session里就行了,问题就是我不知道怎么取,因为没法把整行高亮。
                    • 我们做的东西没有这么漂亮的说, 帮不到你乐:(
                      • 已经帮了很大忙了,非常感谢!!
                    • 不是可以设选中以后的format吗?
                      • 你能说具体点吗?谢谢!^_^
                    • how about this way:
                      In master.aspx, create HyperLinkColumn
                      <Columns>
                      <asp:HyperLinkColumn
                      DataNavigateUrlField="id"
                      DataNavigateUrlFormatString="dg_detail1.aspx?id={0}"
                      Text="Get Details"
                      />
                      </Columns>

                      in dg_detail1.aspx, in page_load(), use Request.QueryString["id"] to get id's value, save to session. Or you don't have to save it in session just try to pass the parameter "id" to each detail pages using "Get" method, such as <a href=dg_detail2.aspx?id=<%=Request.QueryString["id"]%> >next </a>(not sure if it's the correct expression)
                      • 卷云,用这办法有个限制,就是不得不按顺序依次打开tables,不能任意跳到某一个table。我还是在想怎样利用selecteditem. 你说怎么办?
        • 卷云溶月说的对, 我的当时的表格也是这样子的
    • 还是不明白你的需求,能不能具体描述一下具体情况以及想要实现的操作过程和结果?
      • 实际上,我的问题是:
        我有10个table,后边9个与第一个都是master-detail的关系,第一个table里被选中的row决定了后边9个table里的内容,所以,我需要能灵活地选中第一个表里的row,就像excel那样,可以高亮一行,然后用上下箭头键在grid里上下滚动,选定高亮行。所有的table都不在一页上。我想的是把第一个table里的selecteditem property存在session object里,这样别的页里的table们就能知道第一个table里选定了哪行了。可是,现在的datagrid是个plain table的样子,根本不能highlight一行,那么selecteditem值怎么办呢?
        • 我对EXCEL不熟,所以对你说的效果总是不太理解。你看看这个基本讲解是不是有用:
          Allowing Users to Select Items in a DataGrid Control

          http://authors.aspalliance.com/aspxtreme/webforms/controls/allowinguserstoselectitemsindatagrid.aspx
          • 谢谢你!这个法子还是只对那种一对一的master-detail关系有用啊,我的detail表可是有9个,怎么办呢?
            • 对,这个我也不太理解。9个表你想怎么显示?全在一页里?分开到9个不同页里?要是分开到9个不同页里,那就不能同时显示了吧?
            • 是九个表,但SelectedItem是在Master表里取吧?这和一对一的Master Detail表应该一样吧?
              • 可是你给的那个例子,只是在每个item上有个hyperlink,这个hyperlink只能引导到一个detail表去啊。我想的是,不要hyperlink,只要选中了一个item,其他的表就知道了selecteditem是什么。
                • 通过个link你可以获得selecteditem,如果你需要可以同时把相关信息保存到session里。我不清楚你的detail页和master页是怎么链接的,所以不清楚怎么把信息从master传到detail里。其实我做的跟楼上卷云的大同小异。
                  • 那样的话,用户要想选定哪一行,必须去点那行对应的那个link,这岂不是很麻烦。我想的就是靠高亮就能选定了。
                    • 要是你想在mouse over的时候highlight并且postback页面,最好还是别这么弄,和服务器传数据可不象windows application那么快。
        • 这句不太理解:“高亮一行,然后用上下箭头键在grid里上下滚动,选定高亮行”“高亮一行”是不是
          当mouse over的时候highlight?要是这样的话可以用script来实现。“选定高亮行”是不是指用鼠标来click高亮行?要是的话可以用上面的讲解来做,应该还有其它的方法。
          • 你用过access数据库吗?在一行的最左边一点,这一整行就选定了。然后,要想选上边那行,只要按下键盘上那个上箭头键就行了,就变成上边那行高亮了。重要的不是做出那个视觉效果,重要的我是想怎样得到selecteditem。
    • 我来给你讲讲,做了不少你需要的这样的东东:
      当你建立master grid的时候,再第一列加个Select button:

      <Columns> <asp:ButtonColumn Text="Select" CommandName="Select" Visible="False"></asp:ButtonColumn>
      </Columns>

      因为visible=false,所以不影响界面。然后在Itemdatabound event里面,把其他的每个列加个属性,见下:
      e.Item.Cells[1].Attributes["onclick"] =
      Page.GetPostBackClientHyperlink(button, "");
      e.Item.Cells[2].Attributes["onclick"] =
      Page.GetPostBackClientHyperlink(button, "");

      这样,会解决你的选整个行的问题。
      然后,在这个grid的selectedindexchanged event里面,
      把选中的值传给子grid,找到相应数据,刷新子grid。
      • 非常感谢你,萝卜样。可是第一列里那个button干什么用呢?如果被user看不到的话,怎么样去点击呢?
        • 你再看看我这里的code。实际上是把这个button的功能全附加到其他的column上,所以当你点其他column时候,就象点select一样。
          public void dgidList_ItemDataBound(object sender, DataGridItemEventArgs e)
          {
          ListItemType itemType = e.Item.ItemType;
          if ((itemType == ListItemType.Pager) ||
          (itemType == ListItemType.Header) ||
          (itemType == ListItemType.Footer))
          {
          return;
          }
          LinkButton button = (LinkButton)e.Item.Cells[0].Controls[0];
          e.Item.Cells[1].Attributes["onclick"] =
          Page.GetPostBackClientHyperlink(button, "");
          e.Item.Cells[2].Attributes["onclick"] =
          Page.GetPostBackClientHyperlink(button, "");

          }
          • 萝卜样,谢谢你的解释!!我在一个forum上问同样的问题,得到一个回帖,
            “You will have to use custom javascript detecting the arrow key presses and submitting the page to the server with appropriate value for each key type.”我对后半句话“submitting the page to the server with appropriate value for each key type.”不理解。你说是啥意思啊?
            • 意思是submit page的时候带着你刚才所按下的箭头的值,比如是左键,右键,还是上,下。。。。
              • 谢谢!!
            • 另,别偷懒,敲对我的名字好吗?
        • 仔细想想,赫赫
    • it IS a plain table, it is just rendered as a bunch of "span" or "table" html tag. you can do something to make it looks better though.