C#中通过DataGrid显示隶属关系

发表于:2007-06-21来源:作者:点击数: 标签:
本文将介绍如何利用DataGridImageColumn列来显示数据的隶属关系,具体的效果如下图 点击图标这一列,就会自动的显示它的下属数据和收缩下属数据。当然对于这个效果中,对原来的DataGridImageColumn进行了一些改动,对DataGrid的也需要一些另外的处理,还有数

   
  本文将介绍如何利用DataGridImageColumn列来显示数据的隶属关系,具体的效果如下图

       C#中通过DataGrid显示隶属关系(图一)



  点击图标这一列,就会自动的显示它的下属数据和收缩下属数据。当然对于这个效果中,对原来的DataGridImageColumn进行了一些改动,对DataGrid的也需要一些另外的处理,还有数据也需要有要求,主要是不能对数据进行排序,不来显示会乱掉。其中排序也需要一个字段信息 我这里设置了一个 KM_XH,一个是否显示的列KM_Visible,有了这两个列,就能够很好的实现了上面的效果。

        在具体的DataGrid定义的地方需要设置下面的一些方法

C#中通过DataGrid显示隶属关系(图二)private void DataGridClick(object sender,System.Windows.Forms.MouseEventArgs e)
C#中通过DataGrid显示隶属关系(图三)C#中通过DataGrid显示隶属关系(图四)        
{
C#中通过DataGrid显示隶属关系(图六)            
//            this.dataGrid1.
C#中通过DataGrid显示隶属关系(图七)
            DataGrid.HitTestInfo hti = this.dataGrid1.HitTest(new System.Drawing.Point(e.X, e.Y)); 
C#中通过DataGrid显示隶属关系(图八)            
if(hti.Row==-1||hti.Column==-1)
C#中通过DataGrid显示隶属关系(图九)                
return;
C#中通过DataGrid显示隶属关系(图十)            
if(this.dataGrid1.TableStyles[0].GridColumnStyles[hti.Column] is DataGridImageBarColumn)
C#中通过DataGrid显示隶属关系(图十)C#中通过DataGrid显示隶属关系(图十二)            
{
C#中通过DataGrid显示隶属关系(图十四)                DataRow dr 
=dt.DefaultView[hti.Row].Row;
C#中通过DataGrid显示隶属关系(图十五)                DataRow[] drs 
= dt.Select(LSGX+"="+dr[ID].ToString());
C#中通过DataGrid显示隶属关系(图十六)                
if(drs.Length>0)
C#中通过DataGrid显示隶属关系(图十七)C#中通过DataGrid显示隶属关系(图十八)                
{
C#中通过DataGrid显示隶属关系(图二十)                    
bool visible = true;
C#中通过DataGrid显示隶属关系(图二十)                    
try
C#中通过DataGrid显示隶属关系(图二十二)C#中通过DataGrid显示隶属关系(图二十三)                    
{
C#中通过DataGrid显示隶属关系(图二十五)                        
if(Convert.ToBoolean(drs[0][strVisible]))
C#中通过DataGrid显示隶属关系(图二十六)C#中通过DataGrid显示隶属关系(图二十七)                        
{
C#中通过DataGrid显示隶属关系(图二十九)                            visible 
= false;
C#中通过DataGrid显示隶属关系(图三十)                        }

C#中通过DataGrid显示隶属关系(图三十)                    }

C#中通过DataGrid显示隶属关系(图三十二)                    
catch
C#中通过DataGrid显示隶属关系(图三十三)C#中通过DataGrid显示隶属关系(图三十四)                    
{
C#中通过DataGrid显示隶属关系(图三十六)                        visible 
= false;
C#中通过DataGrid显示隶属关系(图三十七)                    }

C#中通过DataGrid显示隶属关系(图三十八)                    
this.setVisible(dr,visible);
C#中通过DataGrid显示隶属关系(图三十九)                }

C#中通过DataGrid显示隶属关系(图四十)            }

C#中通过DataGrid显示隶属关系(图四十)        }

C#中通过DataGrid显示隶属关系(图四十二)
C#中通过DataGrid显示隶属关系(图四十三)C#中通过DataGrid显示隶属关系(图四十四)        
/// <summary>
C#中通过DataGrid显示隶属关系(图四十五)        
/// 设置下级的可见性
C#中通过DataGrid显示隶属关系(图四十六)        
/// </summary>
C#中通过DataGrid显示隶属关系(图四十七)        
/// <param name="dr"></param>
C#中通过DataGrid显示隶属关系(图四十八)        
/// <param name="visible"></param>

C#中通过DataGrid显示隶属关系(图四十九)        private void setVisible(DataRow dr,bool visible)
C#中通过DataGrid显示隶属关系(图五十)C#中通过DataGrid显示隶属关系(图五十)        
{
C#中通过DataGrid显示隶属关系(图五十三)            DataRow[] drs 
= dt.Select(LSGX+"="+dr[ID].ToString());
C#中通过DataGrid显示隶属关系(图五十四)            
foreach(DataRow drChild in drs)
C#中通过DataGrid显示隶属关系(图五十五)C#中通过DataGrid显示隶属关系(图五十六)            
{
C#中通过DataGrid显示隶属关系(图五十八)                drChild[strVisible]
=visible;
C#中通过DataGrid显示隶属关系(图五十九)                
if(!visible)
C#中通过DataGrid显示隶属关系(图六十)C#中通过DataGrid显示隶属关系(图六十)                
{
C#中通过DataGrid显示隶属关系(图六十三)                    
this.setVisible(drChild,visible);
C#中通过DataGrid显示隶属关系(图六十四)                }

C#中通过DataGrid显示隶属关系(图六十五)            }

C#中通过DataGrid显示隶属关系(图六十六)        }

C#中通过DataGrid显示隶属关系(图六十七)
C#中通过DataGrid显示隶属关系(图六十八)C#中通过DataGrid显示隶属关系(图六十九)        
/// <summary>
C#中通过DataGrid显示隶属关系(图七十)        
/// 设置图片信息
C#中通过DataGrid显示隶属关系(图七十)        
/// </summary>
C#中通过DataGrid显示隶属关系(图七十二)        
/// <param name="sender"></param>
C#中通过DataGrid显示隶属关系(图七十三)        
/// <param name="e"></param>

C#中通过DataGrid显示隶属关系(图七十四)        private void setImage(object sender,DataGridImageCellEventArgs e)
C#中通过DataGrid显示隶属关系(图七十五)C#中通过DataGrid显示隶属关系(图七十六)        
{
C#中通过DataGrid显示隶属关系(图七十八)            
try
C#中通过DataGrid显示隶属关系(图七十九)C#中通过DataGrid显示隶属关系(图八十)            
{
C#中通过DataGrid显示隶属关系(图八十二)                DataRow dr 
= dt.DefaultView[e.Row].Row;
C#中通过DataGrid显示隶属关系(图八十三)                e.Number 
= Number(dr,0);
C#中通过DataGrid显示隶属关系(图八十四)                e.HasList 
= HasList(dr);
C#中通过DataGrid显示隶属关系(图八十五)                
if(e.HasList)
C#中通过DataGrid显示隶属关系(图八十六)C#中通过DataGrid显示隶属关系(图八十七)                
{    
C#中通过DataGrid显示隶属关系(图八十九)                    
if(ShowList(dr))
C#中通过DataGrid显示隶属关系(图九十)C#中通过DataGrid显示隶属关系(图九十)                    
{
C#中通过DataGrid显示隶属关系(图九十三)                        e.Image 
= this.imageList1.Images[0];
C#中通过DataGrid显示隶属关系(图九十四)                    }

C#中通过DataGrid显示隶属关系(图九十五)                    
else
C#中通过DataGrid显示隶属关系(图九十六)C#中通过DataGrid显示隶属关系(图九十七)                    
{
C#中通过DataGrid显示隶属关系(图九十九)                        e.Image 
= this.imageList1.Images[1];
C#中通过DataGrid显示隶属关系(图一百)                    }

C#中通过DataGrid显示隶属关系(图一百零一)                }

C#中通过DataGrid显示隶属关系(图一百零二)                
else
C#中通过DataGrid显示隶属关系(图一百零三)C#中通过DataGrid显示隶属关系(图一百零四)                
{
C#中通过DataGrid显示隶属关系(图一百零六)                    e.Image 
= this.imageList1.Images[2];
C#中通过DataGrid显示隶属关系(图一百零七)                }

C#中通过DataGrid显示隶属关系(图一百零八)            }

C#中通过DataGrid显示隶属关系(图一百零九)            
catch
C#中通过DataGrid显示隶属关系(图一百一十)C#中通过DataGrid显示隶属关系(图一百一十一)            
{
C#中通过DataGrid显示隶属关系(图一百一十三)            }

C#中通过DataGrid显示隶属关系(图一百一十四)        }

C#中通过DataGrid显示隶属关系(图一百一十五)
C#中通过DataGrid显示隶属关系(图一百一十六)C#中通过DataGrid显示隶属关系(图一百一十七)        
/// <summary>
C#中通过DataGrid显示隶属关系(图一百一十八)        
/// 是否显示细表
C#中通过DataGrid显示隶属关系(图一百一十九)        
/// </summary>
C#中通过DataGrid显示隶属关系(图一百二十)        
/// <param name="dr"></param>
C#中通过DataGrid显示隶属关系(图一百二十一)        
/// <returns></returns>

C#中通过DataGrid显示隶属关系(图一百二十二)        private bool ShowList(DataRow dr)
C#中通过DataGrid显示隶属关系(图一百二十三)C#中通过DataGrid显示隶属关系(图一百二十四)        
{
C#中通过DataGrid显示隶属关系(图一百二十六)            
if(dt.Select(LSGX+"="+dr[ID].ToString()+" and "+strVisible+" = true").Length>0)
C#中通过DataGrid显示隶属关系(图一百二十七)                
return true;
C#中通过DataGrid显示隶属关系(图一百二十八)            
return false;
C#中通过DataGrid显示隶属关系(图一百二十九)        }

C#中通过DataGrid显示隶属关系(图一百三十)C#中通过DataGrid显示隶属关系(图一百三十一)        
/// <summary>
C#中通过DataGrid显示隶属关系(图一百三十二)        
/// 是否有细表
C#中通过DataGrid显示隶属关系(图一百三十三)        
/// </summary>
C#中通过DataGrid显示隶属关系(图一百三十四)        
/// <param name="dr"></param>
C#中通过DataGrid显示隶属关系(图一百三十五)        
/// <returns></returns>

C#中通过DataGrid显示隶属关系(图一百三十六)        private bool HasList(DataRow dr)
C#中通过DataGrid显示隶属关系(图一百三十七)C#中通过DataGrid显示隶属关系(图一百三十八)        
{
C#中通过DataGrid显示隶属关系(图一百四十)            
if(dt.Select(LSGX+"="+dr[ID].ToString()).Length>0)
C#中通过DataGrid显示隶属关系(图一百四十一)                
return true;
C#中通过DataGrid显示隶属关系(图一百四十二)            
return false;
C#中通过DataGrid显示隶属关系(图一百四十三)        }

C#中通过DataGrid显示隶属关系(图一百四十四)C#中通过DataGrid显示隶属关系(图一百四十五)        
/// <summary>
C#中通过DataGrid显示隶属关系(图一百四十六)       &

原文转自:http://www.ltesting.net