CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

基本问题

楼主icefireren()2005-08-01 14:56:30 在 .NET技术 / C# 提问

1.关于DataGrid  
      1)我把DataGrid与一个dataview做好数据绑定,DataGrid能显示出数据,没问题。但我想在DataGrid里再另外显示几个自定义的列,比如最前面一列加上checkbox,最后面一列也加上checkbox,该如何做?  
      2)找了好久,没找到这么一个属性,如何设置让DataGrid单击的时候选中整行,而不是某个单元格  
      3)如果以上功能难实现,能否推荐一个DataGrid的下载网址?要适用于MDI程序的  
   
  2.关于DataView  
      1)我得到了一个DataView,我该如何实现基于该DataView的新增、删除、修改数据操作?用程序实现。能否给个简单例子?这些操作需要能把数据返回到数据库中。  
      2)如果不能用DataView实现,那也能不能给个例子。  
   
  谢谢各位,如果分不够我可以另开贴加分! 问题点数:200、回复次数:22Top

1 楼icefireren()回复于 2005-08-01 14:58:09 得分 0

请不要怀疑我的专家分,那是3年前赚来的,3年没用过.net了,很多东西都忘记了,现在急用。所以.....Top

2 楼pupo(泡泡)回复于 2005-08-01 15:02:42 得分 0

用模板Top

3 楼athossmth(athos)回复于 2005-08-01 15:13:26 得分 0

datagrid的东西参考:www.datagridgirl.com  
  dataview的话,可以先找到datarowview,再更新fieldTop

4 楼lyb_abiandbel(专注于OO分析与设计)回复于 2005-08-01 15:27:07 得分 130

回答DataGrid的第一问:  
   
   
  用列样式columnstyle  
   
  #region   角色信息Datagrid样式  
  private   void   dgColumnStyle_Role(bool   editFlag)  
  {  
  //声明DataGridTableStyle  
  DataGridTableStyle   myTableStyle   =   new   DataGridTableStyle(   );  
  myTableStyle.MappingName   =   "XT_QX_JS_TB";  
   
  //声明DataGridColumnStyle1  
  DataGridTextBoxColumn   ColumnStyle1   =   new   DataGridTextBoxColumn();  
  ColumnStyle1.MappingName   =   "QX_JS_BM";  
  ColumnStyle1.HeaderText   =   "编号";  
  ColumnStyle1.Width   =   0;  
  ColumnStyle1.ReadOnly   =   true;  
  ColumnStyle1.Format=   "yyyy年MM月dd日";//这列如果是日期类型可以用指定日期格式显示日期值。  
  myTableStyle.GridColumnStyles.Add(ColumnStyle1);  
   
  //声明DataGridColumnStyle2  
  DataGridTextBoxColumn   ColumnStyle2   =   new   DataGridTextBoxColumn();  
  ColumnStyle2.MappingName   =   "QX_JS_MC";  
  ColumnStyle2.HeaderText   =   "名称";  
  ColumnStyle2.Width   =   120;  
  ColumnStyle2.NullText="";  
  myTableStyle.GridColumnStyles.Add(ColumnStyle2);  
   
  //声明DataGridColumnStyle3  
  DataGridTextBoxColumn   ColumnStyle3   =   new   DataGridTextBoxColumn();  
  ColumnStyle3.MappingName   =   "QX_JS_MS";  
  ColumnStyle3.HeaderText   =   "描述";  
  ColumnStyle3.Width   =   120;  
  ColumnStyle3.NullText="";  
  myTableStyle.GridColumnStyles.Add(ColumnStyle3);  
   
  //声明DataGridColumnStyle5  
  DataGridBoolColumn   ColumnStyle5   =   new   DataGridBoolColumn();  
  ColumnStyle5.MappingName   =   "QX_JS_SFYX";  
  ColumnStyle5.HeaderText   =   "有效";  
  ColumnStyle5.AllowNull   =   false;  
  ColumnStyle5.TrueValue   =   (Decimal)1;  
  ColumnStyle5.FalseValue   =   (Decimal)0;  
  ColumnStyle5.Width   =   40;  
  myTableStyle.GridColumnStyles.Add(ColumnStyle5);  
   
  //声明DataGridColumnStyle4  
  DataGridTextBoxColumn   ColumnStyle4   =   new   DataGridTextBoxColumn();  
  ColumnStyle4.MappingName   =   "QX_JS_XSSX";  
  ColumnStyle4.HeaderText   =   "顺序";  
  ColumnStyle4.Width   =   40;  
  myTableStyle.GridColumnStyles.Add(ColumnStyle4);  
   
  dataGridMain.TableStyles.Clear();  
  dataGridMain.TableStyles.Add(   myTableStyle   );  
  }  
  #endregion  
   
   
  为绑定该数据库的datagrid指定dataGridTableStyle(点击TableStyles属性右边的按纽),设置dataGridTableStyle的MappingName为你的表名,然后再添加GridCloumnStyle(也是点击GridCloumnStyles右边的按纽)设置GridCloumnStyle为表中的列名,想要哪个显示就添加哪个,不要显示就不添加即可!  
   
  MappingName一定要指定,不然没有效果!  
  Top

5 楼tslkfyh(TSL)回复于 2005-08-01 15:42:13 得分 20

第一个:你可以直接增加一个模板列  
  第二个:DataGrid是没有这么一个属性的,最终生成的是一个TABLE,你可以用JAVASCRIPT来实现单击某格时让这一行的颜色发生变化(意思就是模拟)  
  停住(你的问题不是B/S中的DataGrid?是WINFORM中的?):  
  如果是WINFORM,那我就关注一下,帮顶  
  要是B/S中的,那么我建议用Repeater上面的问题很好解决  
   
  Top

6 楼tslkfyh(TSL)回复于 2005-08-01 15:45:31 得分 0

DataView可以转换成DATASET(相当于脱机数据库)他自带的可以和数据库保持同步Top

7 楼JzeroBiao(先知)回复于 2005-08-01 15:45:48 得分 0

来晚了....Top

8 楼allanli(若尘)回复于 2005-08-01 15:58:56 得分 0

免费使用,注册可以得到源代码  
   
  http://www.softreg.com.cn/shareware_view.asp?id=/438FC1F9-931B-4027-83DD-FA11525080E8/Top

9 楼icefireren()回复于 2005-08-01 16:46:53 得分 0

不好意思,是我的问题。谢谢楼上各位的回答。尤其是lyb_abiandbel(渴望成为高手)   ,这么详细  
   
  但是。。。。我要做的是针对Winform。是我没说清楚  
   
  另外lyb_abiandbel(渴望成为高手)   ,我可能没说清楚,我是要在数据绑定的列之外再增加2列,这2列是不对应数据库字段的,这时候我的MappingName该设成什么?  
   
  关于第二个问题,好像只有   athossmth(athos)   提到过,但我看过msdn,说增加行可以这样做  
  DataRowView   drv   =   mydataview.AddNew();  
  drv["xxx"]   =   "xxx";  
  drv.EndEdit();我这样试过,没有报错,但结果也没写回数据库,是不是还要执行其他方法才能写回?  
   
  可能问题太简单,很少看到有人能列出比较详细的回答。  
   
  不管怎样,再次谢谢大家,分一定会给。呵呵,要这么多分我也没用  
   
  Top

10 楼lyb_abiandbel(专注于OO分析与设计)回复于 2005-08-02 09:02:50 得分 0

增加2列,这2列是不对应数据库字段,那这两列数据重那里来?  
   
  你还是把数据整理一下放到DataSet的DataTable中吧.  
   
  MappingName就设成你DataTable中的列名啊!  
   
  其实,上面的MappingName就是绑定数据库的DS中的DataTable的列名,而不是数据库中的字段名,  
  只不过是因为DataTable的列名和数据库的列名通常写成一样的,所以才觉得是数据库中的字段,其实应该是数据源的字段。Top

11 楼tslkfyh(TSL)回复于 2005-08-02 09:22:02 得分 0

果然是WINFORM的,问题就比较难些了,第一个问题,在前面加一个CHECKBOX简单,在后面再加一个不会啊,关注中Top

12 楼steelmqb1(小N)回复于 2005-08-02 09:32:55 得分 0

用模板列显示chkboxTop

13 楼steelmqb1(小N)回复于 2005-08-02 09:33:24 得分 0

用模板列显示chkboxTop

14 楼beyond1680(小也)回复于 2005-08-02 09:40:07 得分 0

给你个好网址:www.codeproject.com  
  虽然全是英文,但有很多了的资料,对你以后搞开发很有用.Top

15 楼tslkfyh(TSL)回复于 2005-08-02 10:00:19 得分 0

steelmqb1(小N)说个具体的方法,winform中的DataGrid怎么用模板列?Top

16 楼silverseven7(就差100 分就升级,多给我点吧)回复于 2005-08-02 10:11:20 得分 0

http://www.softreg.com.cn/shareware_view.asp?id=/438FC1F9-931B-4027-83DD-FA11525080E8/  
  Top

17 楼icefireren()回复于 2005-08-02 11:38:21 得分 0

再次感谢。  
   
  关于手动的在DataTable里加上几个自定义列的方法我想过,但是如果我本来数据集是1w条,那是不是意味着要每行都自己来填充数据?具体我待会试试  
   
  关于模板,不知道steelmqb1(小N)能不能详细解释一下,不懂!  
   
    silverseven7()   这种号称开源但收费的控件就最好不要拿过来了,有做广告之嫌。但还是谢谢回复  
   
  关于我的第二个问题好像没人愿意回答,我自己试了一下,如果用DbCommandBuilder绑定Adapter,然后Adapter.update是可以实现的。不知道有没有其他更好的方法?  
   
  期待.............Top

18 楼baya(披着猫皮的老鼠)回复于 2005-08-02 11:51:01 得分 20

这是datagrid绑定的用法,包括模板列等。其中datafield是我从数据库中取出的字段名。  
   
  <asp:datagrid   id="dgData"   runat="server"   datakeyfield="pid"> <Columns> <asp:BoundColumn   datafield="pid"   visible="False"></asp:BoundColumn> <asp:BoundColumn   datafield="name"   visible="False"></asp:BoundColumn> <asp:BoundColumn   datafield="url"   visible="False"></asp:BoundColumn> <asp:BoundColumn   datafield="thumbnail"   visible="False"></asp:BoundColumn> <asp:TemplateColumn   headertext="name"> <ItemTemplate> <asp:HyperLink   id="link"   width="120px"   runat="server"   target="_self"> <asp:Label   id="linktext"   width="120px"   runat="server"></asp:Label> </asp:HyperLink> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn   headertext="name"   itemstyle-horizontalalign="Center"> <ItemTemplate> <asp:Literal   id="litHtml"   runat="server"></asp:Literal> </ItemTemplate>  
  </asp:TemplateColumn>  
  </Columns>  
  </asp:datagrid>  
   
  pageload事件  
  dgData.DataSource   =   ds;  
  dgData.DataBind();  
   
  databind事件  
  private   void   itemDataBound(object   sender,   DataGridItemEventArgs   e)  
  {  
  if   ((e.Item.ItemType   ==   ListItemType.Item)   ||   (e.Item.ItemType   ==   ListItemType.AlternatingItem))  
  {  
  Label   linktext   =   (Label)e.Item.FindControl("linktext");  
  linktext.Style.Add("cursor",   "hand");  
  linktext.Text   =   e.Item.Cells[1].Text;  
  linktext.ToolTip   =   ResourceManager.GetString("SOFTWARE_DOWNLOAD");  
  string   linkwhere   =   "";  
  linkwhere   =   "download.aspx?type=1&pid="   +   e.Item.Cells[0].Text   +   "&linkurl="   +   Server.UrlEncode(e.Item.Cells[2].Text.Trim());  
  HyperLink   link   =     (HyperLink)   e.Item.FindControl("link");  
  link.NavigateUrl   =   linkwhere;  
   
   
  Literal   litHtml   =   (Literal)e.Item.FindControl("litHtml");  
  StringBuilder   strbHtml   =   new   StringBuilder();  
  strbHtml.Append("<a   title='");  
  strbHtml.Append(ResourceManager.GetString("SOFTWARE_DOWNLOAD"));  
  strbHtml.Append("'   href=\"download.aspx?type=1&pid=");  
  strbHtml.Append(e.Item.Cells[0].Text);  
  strbHtml.Append("&linkurl=");  
  strbHtml.Append(Server.UrlEncode(e.Item.Cells[2].Text.Trim()));  
  strbHtml.Append("\"><img   src=\"");  
  string   strPicPath   =   e.Item.Cells[3].Text.Trim();  
  if   (strPicPath   ==   ""   ||   strPicPath   ==   "&nbsp;")  
  strbHtml.Append("../library/images/download.gif\"   border=0></a>");  
  else  
  {  
  strbHtml.Append(strPicPath);  
  strbHtml.Append("\"   border=0></a>");  
  }  
  litHtml.Text   =   strbHtml.ToString();  
   
  int   nSize   =   -1;  
  try  
  {  
  nSize   = int.Parse(e.Item.Cells[6].Text);  
  }  
  catch  
  {  
  nSize   =   -1;  
  }  
  if   (nSize   ==   -1)  
  e.Item.Cells[6].Text   =   ResourceManager.GetString("UNKOWN_SIZE");  
  else  
  {  
  e.Item.Cells[6].Text   =   OmsConvert.ToSize(nSize);  
  }  
  }  
  }  
   
  Top

19 楼baya(披着猫皮的老鼠)回复于 2005-08-02 11:51:27 得分 20

在绑定事件中加入这样的代码可以实现鼠标鼠标到某行上显示你指定的颜色  
  e.Item.Attributes.Add("onmouseover",   "this.oldcolor=this.style.backgroundColor;this.style.backgroundColor='#C217FF'");    
  e.Item.Attributes.Add("onmouseout",   "this.style.backgroundColor=this.oldcolor");Top

20 楼icefireren()回复于 2005-08-02 13:04:52 得分 0

:)楼上给的例子很规范的,但我要的是winformTop

21 楼luckcao(luckcao)回复于 2005-08-02 14:08:06 得分 10

1W条数据,不用你自己每一行设置值啊.你给这一列设置一个DEFAULTVALUE不就行了?Top

22 楼icefireren()回复于 2005-08-02 15:08:09 得分 0

我试过,可以自己增加几列来搞定在后面加列。  
   
  但还没找到好方法在前面加列,Table没有insertcolumn方法。各位有什么好办法?  
   
  另外DataGrid太难用了,去除复选还要写code,郁闷。推荐几个好的Grid吧Top

相关问题

  • COM基本问
  • 基本命令
  • 基本问题:
  • 基本语法
  • 基本问题
  • 基本问题!
  • 基本问题
  • 基本问题
  • 基本语法
  • 基本问题

关键词

  • b/s
  • 数据库
  • 模板
  • datagrid
  • 字段
  • 数据
  • winform
  • js
  • columnstyle
  • mytablestyle

得分解答快速导航

  • 帖主:icefireren
  • lyb_abiandbel
  • tslkfyh
  • baya
  • baya
  • luckcao

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo