DataGrid控件(可以实现不刷新增加删除等操作)

现在的网络上最流行的最火的技术就是Ajax了,不刷新技术,给客户带来的最新体验。google等在一些大的网站上已经都应用了。在平时开发的时候要做到DataGrid控件不刷新有点麻烦,我就把我的实现写成了一个控件(现在 MS在Atlas里面也实现了,不过在vs.net2003里面还是很麻烦)
 下面是实现效果:

可以实现增加,删除,全选择,显示行号等功能
主要代码:
  1           #region  用户数据源或者ViewState创建控件层次结构
  2           protected   virtual   void  CreateControlHierarchy( bool  useDataSource)
  3          {
  4              IEnumerable dataSource  =   null  ;
  5 
  6               int  rowCount  =   0 ;
  7               int  columnCount  =   0 ;
  8 
  9               if (useDataSource)
 10              {
 11                  dataSource  =  GetDataSource();
 12              }
 13               else
 14              {
 15                  dataSource  =   new   object [( int )ViewState[ " RowCount " ]];
 16              }
 17 
 18               if ( dataSource  !=   null )
 19              {
 20                  Table table  =   new  Table();
 21 
 22 
 23                   #region  增加表的样式 
 24                  table.Attributes.Add( " Cellpadding " , " 0 " );
 25                  table.Attributes.Add( " Cellspacing " , " 0 " );
 26                  table.Attributes.Add( " border " , " 0 " );
 27                  table.Attributes.Add( " style " , this ._TableStyle);
 28                  table.ID  =   this .UniqueID + " Table " ;
 29                  table.Width  =   this .Height;
 30                  table.Width  =   this .Width;
 31                  
 32                   #endregion
 33 
 34                  TableRowCollection rows  =  table.Rows;
 35 
 36                   // 增加控件 
 37                  Controls.Add(table);
 38 
 39                   bool  createdHeader  =   false ;
 40 
 41                   // 显示行号
 42                   int  iCount  =   1 ;
 43 
 44                   // 如果为空行就只加表头
 45                  System.Data.DataView dv  =  (System.Data.DataView)dataSource;
 46 
 47                   if (dv.Table.Rows.Count == 0 )
 48                  {
 49                       #region  增加表头
 50                       if (createdHeader  ==   false )
 51                      {
 52                          TableRow headerRow  =   new  TableRow();
 53 
 54                           // 表头样式
 55                          headerRow.Attributes.Add( " bgcolor " ,_TableHeadBGColor);
 56 
 57                          TableCellCollection headerCells  =  headerRow.Cells;
 58 
 59                          columnCount  =  dv.Table.Columns.Count;
 60                      
 61                           // 是否显示每行前的索引值
 62                           if (_ShowIndex)
 63                          {
 64 
 65                              TableCell cell  =   new  TableCell();
 66                              cell.Attributes.Add( " style " , " width:20px;border-left:1 #FFFFFF solid;border-top:1 #FFFFFF solid;border-bottom:1 #d8d8d8 solid;border-right:1 #d8d8d8 solid; " );
 67                              cell.Wrap  =  _wrap;
 68                              cell.Attributes.Add( " align " , " center " );
 69                              cell.Text  =   "   " ;
 70                              headerCells.Add(cell);
 71                          }
 72 
 73                           for ( int  i = 0 ;i < columnCount;i ++ )
 74                          {
 75                               // TableHeaderCell cell = new TableHeaderCell();
 76                              TableCell cell  =   new  TableCell();
 77                              cell.Attributes.Add( " style " , this ._TableTHeadCellStyle);
 78                              cell.Attributes.Add( " align " , " center " );
 79                              cell.Wrap  =  _wrap;
 80                               if ( this ._EnableColumnWith)
 81                              {
 82 
 83                                  cell.Width  =   this ._ColumnWith[i];
 84                              }
 85 
 86                               if (_CheckBoxVisible)     // 显示CheckBox 
 87                              {
 88                                   if (i  ==   this ._ColumnNum)
 89                                  {
 90                                      cell.Text  =   " <IMG id=\ "" +this.UniqueID+ " checkAll\ "  οnclick=\ " chooseallCheckBox( this , ' "+this.UniqueID+"HBCheckAll ' );\ "  src=\ "" +ImgSrcURL+ " \ " > " ; // 加入全选图片
 91                                  }
 92                                   else
 93                                  {
 94                                      cell.Text  =  _ColumnNames[i];
 95                                  }
 96                              } // 没有全选
 97                               else
 98                              {
 99                                  cell.Text  =  _ColumnNames[i];
100                              }
101                              
102                              headerCells.Add(cell);
103                          }
104                          createdHeader  =   true ;
105                          rows.Add(headerRow);
106                          
107                      }
108                       #endregion
109                  }
110                   else
111                  {
112                       for ( int  h = 0 ;h < dv.Table.Rows.Count;h ++ )
113                      {
114                          
115                           #region  增加表头
116                           if (createdHeader  ==   false )
117                          {
118                              TableRow headerRow  =   new  TableRow();
119 
120                               // 表头样式
121                              headerRow.Attributes.Add( " bgcolor " ,_TableHeadBGColor);
122 
123                              TableCellCollection headerCells  =  headerRow.Cells;
124                          
125 
126                               // ColumnCount
127                               if (useDataSource)
128                              {
129                                  
130                                  columnCount  =  dv.Table.Columns.Count;
131                              }
132                               else
133                              {
134                                  columnCount  =  ( int )ViewState[ " ColumnCount " ];
135                              }
136 
137                      
138                               // 是否显示每行前的索引值
139                               if (_ShowIndex)
140                              {
141 
142                                  TableCell cell  =   new  TableCell();
143                                  cell.Attributes.Add( " style " , " width:20px;border-left:1 #FFFFFF solid;border-top:1 #FFFFFF solid;border-bottom:1 #d8d8d8 solid;border-right:1 #d8d8d8 solid; " );
144                                  cell.Wrap  =  _wrap;
145                                  cell.Attributes.Add( " align " , " center " );
146                                  cell.Text  =   " &nbsp; " ;
147                                  headerCells.Add(cell);
148                              }
149 
150                               for ( int  i = 0 ;i < columnCount;i ++ )
151                              {
152                                   // TableHeaderCell cell = new TableHeaderCell();
153                                  TableCell cell  =   new  TableCell();
154                                  cell.Attributes.Add( " style " , this ._TableTHeadCellStyle);
155                                  cell.Attributes.Add( " align " , " center " );
156                                  cell.Wrap  =  _wrap;
157 
158                                   if ( this ._EnableColumnWith)
159                                  {
160 
161                                      cell.Width  =   this ._ColumnWith[i];
162                                  }
163 
164                                   if (_CheckBoxVisible)     // 显示CheckBox 
165                                  {
166                                       if (i  ==   this ._ColumnNum)
167                                      {
168                                          cell.Text  =   " <IMG id=\ "" +this.UniqueID+ " checkAll\ "  οnclick=\ " chooseallCheckBox( this , ' "+this.UniqueID+"HBCheckAll ' );\ "  src=\ "" +ImgSrcURL+ " \ " > " ; // 加入全选图片
169                                      }
170                                       else
171                                      {
172                                           if (useDataSource)
173                                          {
174                                              cell.Text  =  _ColumnNames[i]; //  dv.Table.Rows[h][i].ToString();
175                                          }
176                                      }
177                                  } // 没有全选
178                                   else
179                                  {
180                                       if (useDataSource)
181                                      {
182                                          cell.Text  =  _ColumnNames[i];
183                                      }
184                                  }
185                              
186                                  headerCells.Add(cell);
187                              }
188                              createdHeader  =   true ;
189                              rows.Add(headerRow);
190                          
191                          }
192                           #endregion
193 
194                           #region  增加行
195                  
196                          TableRow row  =   new  TableRow();
197                          TableCellCollection cells  =  row.Cells;
198                           // 增加行的样式
199                          row.Attributes.Add( " style " ,_TableTBodyRowStyle);
200 
201                           // 是否显示每行前面的索引号
202                           if (_ShowIndex)
203                          {
204 
205                              TableCell cell  =   new  TableCell();
206                              cell.Attributes.Add( " style " , " BORDER-RIGHT:#d8d8d8 1px solid;BORDER-TOP:#ffffff 1px solid;BORDER-LEFT:#ffffff 1px solid;WIDTH:20px;BORDER-BOTTOM:#d8d8d8 1px solid " );
207                              cell.Wrap  =  _wrap;
208                              cell.Attributes.Add( " bgcolor " , this ._TableHeadBGColor);
209                              cell.Attributes.Add( " align " , " center " );
210                              cell.Text = iCount.ToString();
211                              cells.Add(cell);
212                              iCount ++ ;
213                          }
214 
215                           for ( int  i = 0 ;i < columnCount;i ++ )
216                          {
217                              TableCell cell  =   new  TableCell();
218                              cell.Attributes.Add( " style " , this ._TableTBodyCellStyle);
219 
220                               if ( this ._EnableColumnWith)
221                              {
222                                  cell.Width  =   this ._ColumnWith[i];
223                              }
224 
225 
226                               if (_CheckBoxVisible)     // 显示CheckBox 
227                              {
228                                   if (useDataSource)
229                                  {
230 
231                                       if (i  ==   this ._ColumnNum)
232                                      {
233                                          cell.Text  =   " <input type=checkbox   name=' " + this .UniqueID + " HBCheckAll' id='Ck_ " +  dv.Table.Rows[h][i].ToString()  + " ' value=' " +  dv.Table.Rows[h][i].ToString() + " '> " ;
234                                      }
235                                       else
236                                      {
237                                          cell.Text  =  dv.Table.Rows[h][i].ToString();
238                                      }
239                                       // 增加单击事件
240                                       if (_ClickItem.EnableClick)     // 是否启用单击事件
241                                      {
242                                           if (_ClickItem.ClickColumnItem !=- 1   && == _ClickItem.ClickColumnItem)
243                                          {                                            
244                                              cell.Attributes.Add( " onclick " , " OnClickColumn(); " );
245                                              cell.ID  =  dv.Table.Rows[h][i].ToString();
246                                          }
247                                      }
248                                  }
249                              }
250                               else
251                              {
252                                   if (useDataSource)
253                                  {
254                                      
255                                      cell.Text  =  dv.Table.Rows[h][i].ToString();
256                                  }
257                              }
258                              cells.Add(cell);
259                          
260                          }
261 
262                          rows.Add(row);
263                          rowCount  ++ ;
264                           #endregion
265 
266                           if (useDataSource)
267                          {
268                              ViewState[ " RowCount " =  rowCount;
269                              ViewState[ " ColumnCount " =  columnCount;
270                          }
271                      }
272                  }
273 
274              }
275          }
276           #endregion

我在45行把数据源转换成了DataView,如果我不这样转成DataView ,在我对数据源赋值的时候,由于表的列名是英文的,我想把它换成汉语的字段名,我先把Table取了出来,然后再对它的列进行改ColumnName,结果显示出来的列名没有按照原来的排序出来,而是乱的,不知道是怎么回事,我45行不改是支持多数据源的,现在只支持DataView了。这是怎么会事?请高手指教。
下面是源代码:
不刷新DataGrid

转载于:https://www.cnblogs.com/HeroBeast/archive/2007/02/25/656420.html

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值