Multi-select ASP.NET datagrid                                        
                                               By
Prashant Nayak (.Net Lover)  译 涟漪勇


简介
ASP.NET datagrid是非常强大和灵活的控件,但是一些特征它并没有提供,像多条记录的选择。 这篇文章显示的功能就是如何容易完成多条记录的选择。

代码的使用
在测试和使用一些有关grid 的javascript编码技巧之后,我得到的解决办法的如下内容。
  • 添加选择用的CheckBox在模板列(Template column)(Hotmail/Yahoo 风格)
  • 添加CheckBox的客户端事件 onclick() 和 javascript , 高亮显示和标记选择的行.
  • 添加服务器端事件 CheckedChanged() 来控制保留住高亮显示的内容. [因为在每次PostBack时DataGrid都会恢复最初的颜色,不会保留我们设置的高亮显示颜色]

Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)<Columns>
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现) 
<asp:TemplateColumn>
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)  
<HeaderTemplate>
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)   
<asp:CheckBox id="chkAll" 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)      onclick
="javascript:SelectAllCheckboxes(this);" runat="server" 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    AutoPostBack
="false" ToolTip="Select/Deselect All" />
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)  
</HeaderTemplate>
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)  
<ItemTemplate> 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    
<asp:CheckBox id="chkSelect" onclick="javascript:HighlightRow(this);"
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)        runat
="server"OnCheckedChanged= "grdEmployees_CheckedChanged" 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)        AutoPostBack
="false" />
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)  
</ItemTemplate> 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现) 
</asp:TemplateColumn> 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
</Columns>

SelectAllCheckBoxes()
这个方程使用了HotMail的选择风格,通过遍历窗体上的每一个CheckBox ,然后确定选择/不选择CheckBox.

HighlightRow()
为了实现在选择时高亮显示和在为选时不高亮显示.,我写了 HighlightRow() 函数, 当使用<asp:CheckBox>控件时,请注意一件非常重要的东西. 在CHECKBOX周围围绕<SPAN>标签,应此我们必须在javascript 中得到<SPAN>标签的.
    
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)//-------------------------------------------------------------
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
    // Select all the checkboxes (Hotmail style)
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
    //-------------------------------------------------------------
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
    function SelectAllCheckboxes(spanChk){
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    
// Added as ASPX uses SPAN for checkbox 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
    var oItem = spanChk.children;
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    
var theBox=oItem.item(0)
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    xState
=theBox.checked;    
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现) 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)        elm
=theBox.form.elements;
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)        
for(i=0;i<elm.length;i++)
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)        
if(elm[i].type=="checkbox" && elm[i].id!=theBox.id)
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)            {
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)            
//elm[i].click();
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
            if(elm[i].checked!=xState)
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)            elm[i].click();
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)            
//elm[i].checked=xState;
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
            }
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    }
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现) 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    
//-------------------------------------------------------------
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
    //----Select highlish rows when the checkboxes are selected
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
    //
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
    // Note: The colors are hardcoded, however you can use 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
    //       RegisterClientScript blocks methods to use Grid's
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
    //       ItemTemplates and SelectTemplates colors.
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
    //         for ex: grdEmployees.ItemStyle.BackColor OR
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
    //                 grdEmployees.SelectedItemStyle.BackColor
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
    //-------------------------------------------------------------
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
    function HighlightRow(chkB)    {
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    
var oItem = chkB.children;
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    xState
=oItem.item(0).checked;    
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    
if(xState)
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)        {chkB.parentElement.parentElement.style.backgroundColor
='lightcoral';
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)           
// grdEmployees.SelectedItemStyle.BackColor
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
         chkB.parentElement.parentElement.style.color='white'; 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)           
// grdEmployees.SelectedItemStyle.ForeColor
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
        }else 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)        {chkB.parentElement.parentElement.style.backgroundColor
='white'; 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)             
//grdEmployees.ItemStyle.BackColor
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
         chkB.parentElement.parentElement.style.color='black'; 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)             
//grdEmployees.ItemStyle.ForeColor
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
        }
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    }
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    
// -->
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
 
这是客户端的事情,一直以来都很好用,既然这么好用,可能有人会问,为什么不用简单明了的HTML 中的checkbox控件呢?答案是ASP.NET 服务器端控件有viewstate属性,应此可以保留住选定的行当提交一个页面的时候.

服务器端
现在,在服务器端,我们要确保高亮的行没有丢失, 因为在每一次 postback, ASP.NET 回送到grid并且丢失高亮显示的行. 下面的方程重新得到高亮的行.
, _
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    ByVal e As System.EventArgs)
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)  
Dim chkTemp As CheckBox = CType(sender, CheckBox)
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现) 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)  
Dim dgi As DataGridItem 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现) 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)  dgi 
= CType(chkTemp.Parent.Parent, DataGridItem)
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)  
If (chkTemp.Checked) Then 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现) 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    dgi.BackColor 
= grdEmployees.SelectedItemStyle.BackColor 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    dgi.ForeColor 
= grdEmployees.SelectedItemStyle.ForeColor
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)  
Else 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现) 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    dgi.BackColor 
= grdEmployees.ItemStyle.BackColor
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)    dgi.ForeColor 
= grdEmployees.ItemStyle.ForeColor 
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)  
End If
Multi-select ASP.NET datagrid(DataGrid多条记录选择的实现)
End Sub

得到你选择的行
很简单! 遍历DataGridItems collection 取得 checkbox [例如. DemoGridItem.Cells(0).Controls(1)]. 检查 CHECKED 属性.当然你也可以用 DataKeyField 获得你要的东西.    

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-06
  • 2021-09-24
  • 2022-12-23
  • 2021-06-13
  • 2022-12-23
  • 2021-12-21
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-06
  • 2021-08-08
  • 2022-12-23
相关资源
相似解决方案