为DataGrid添加RadioButton按钮,实现单选效果


由于ASP.NET中的RadioButton控件在DataGrid 模板列中不能达到分组的效果,但是基于ASP.NET良好的编程性的前提下,要达到这个效果并不是很难.以前有见过一些朋友采用HTML控件可以达到这一效果,这里有我采用ASP.NET自带的RadioButton控件来编写的效果,虽然生成出来的JS不怎么漂亮,但也有一定的好处.
在ASPX页面中加入以下代码:
<asp:datagrid class="grid" id="DataGrid1" runat="server" Width="720px" AllowSorting="True" AllowPaging="True"
                                            PageSize
="3" AutoGenerateColumns="False" BackColor="White">
                                            
<Columns>
                                                
<asp:TemplateColumn>
                                                    
<ItemTemplate>
                                                        
<asp:RadioButton ID="radGroup" runat="server"></asp:RadioButton>
                                                    
</ItemTemplate>
                                                
</asp:TemplateColumn>
                                                
<asp:BoundColumn DataField="CUSTNO" HeaderText="客户"></asp:BoundColumn>
                                                
<asp:BoundColumn DataField="SBNO" HeaderText="单号"></asp:BoundColumn>
                                                
<asp:BoundColumn DataField="ORDERNO" HeaderText="订单号码"></asp:BoundColumn>
                                                
<asp:BoundColumn DataField="LOTNO" HeaderText="批号"></asp:BoundColumn>
                                                
<asp:BoundColumn DataField="GETPCS" HeaderText="匹数">
                                                    
<ItemStyle HorizontalAlign="Right"></ItemStyle>
                                                
</asp:BoundColumn>
                                                
<asp:BoundColumn DataField="GETKG" HeaderText="数量">
                                                    
<ItemStyle HorizontalAlign="Right"></ItemStyle>
                                                
</asp:BoundColumn>

                        
</Columns>
                                            
<PagerStyle Mode="NumericPages"></PagerStyle>
                                        
</asp:datagrid>
在CS代码中加入以下代码段:
private void DataGrid1_PreRender(object sender, System.EventArgs e)
        
{
            ArrayList arylstRadio
=new ArrayList();

            
if(this.DataGrid1.Items.Count>0 & !Page.IsPostBack)
            
{
                RadioButton radFirst
=this.DataGrid1.Items[0].Cells[0].Controls[1as RadioButton;

                radFirst.Checked
=true;
            }

            
if(this.DataGrid1.Items.Count>0)
            
{                
            
                String series
="";

                
for(int i=0;i<this.DataGrid1.Items.Count;++i)
                
{
                    RadioButton rad
=this.DataGrid1.Items[i].Cells[0].Controls[1as RadioButton;
                    
if(rad!=null)
                        arylstRadio.Add(rad.ClientID);
                }


                
//为前面的RadioButton添加客户端事件达到在整个Grid中实现单选的效果
                for(int i=0;i<this.DataGrid1.Items.Count;++i)
                
{
                    RadioButton rad
=this.DataGrid1.Items[i].Cells[0].Controls[1as RadioButton;
                    series
=this.DataGrid1.Items[i].Cells[2].Text;

                    
string aa="document.all('"+this.hlDetail.ClientID+"').href='"+"Detail.aspx?_series="+series+"&JBNO="+tbxJobCard.Text+"';";
                        aa
+="document.all('"+this.HyperLink3.ClientID+"').href='"+"Detail.aspx?_series="+series+"&JBNO="+tbxJobCard.Text+"';";

                    rad.Attributes.Add(
"onclick",getRadioId(rad.ClientID,arylstRadio)+aa);
                }

            }

        }


        
//得到其它RadioButton的索引
        private string getRadioId(string currentClientId,ArrayList ary,int index)
        
{
            String ClientIdList
="";

            
foreach(object obj in ary)
            
{
                
if(obj.ToString()!=currentClientId)
                
{
                    ClientIdList
+="document.all('"+obj.ToString()+"').checked=false;";
                }

            }

//其中采用(Hidden)hidIndex保存index(选中项的索引)
            return ClientIdList+ "document.all('" + this.hidIndex.ClientID + "').value=" + index + ";";
        }

以上示例供学习ASP.NET的朋友参考.
posted @ 2007-06-13 13:53  罗志威  阅读(2234)  评论(2编辑  收藏  举报