加入收藏 | 设为首页 | 会员中心 | 我要投稿 江门站长网 (https://www.0750zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在ASP.NET 2.0中操作数据之四十九:为GridView控件添加RadioButt

发布时间:2016-11-24 00:05:35 所属栏目:MsSql教程 来源:站长网
导读:导言: GridView控件提供了大量的内置功能。它包含了一系列的域(field)来显示诸如text、images、hyperlinks和buttons。另外它支持模板(template)用于用户自定义界面。我们可以构建这样一个GridView控件,用户仅需要点击控件里的一个按钮,每一条记录行

  在本篇教程,当点击某个供应商时,将在本业或另一页显示该供应商提供的产品。为达到该目的,我们在页面添加2个Button Web控件。ID分别为ListProducts和SendToProducts,当点击ListProducts按钮时,发生回传(postback),接着将在本页面显示该供应商的产品,当点击SendToProducts按钮时,将会链接到另一个页面,显示该供应商的产品。
图9显示了GridView控件和添加的两个Button Web控件。

/uploads/allimg/c161121/14OI93YZ950-6012I.gif
图9:显示供应商的 Name, City和Country信息

第3步:添加Radio Buttons列

  至此,GridView里包含company name, city和country三列,但还缺少radio buttons列。不幸的是GridView控件并不包含内置的RadioButtonField,因此只有我们自己手动添加。我们可以添加一个模板(TemplateField)并在其ItemTemplate模板里显示一个radio button。这样的话就为GridView控件的每一行记录添加了一个radio button。

  我们首先可能会想到直接在TemplateField的ItemTemplate模版里添加一个RadioButton Web控件。不错,这样将为每一行添加radio button,但是这些radio button不能聚合,因此不能形成互斥关系。造成的后果是,最终用户可以在GridView控件里同时选定多个radio button按钮。

  虽然这样做不能到达我们期望的要求,不过还是值得我们花时间来考察一下为什么这些radio button不能聚合。首先,为GridView添加一个TemplateField,放置在最左边,然后智能标签里选“编辑模板”,进入TemplateField的ItemTemplate 模板,从工具箱拖一个Radio Button控件到模板(见图10),设置其ID为RowSelector , GroupName属性为SuppliersGroup。

/uploads/allimg/c161121/14OI93Z1QP-614R5.gif
图10:在ItemTemplate模板添加一个RadioButton控件

完成设置后,GridView的代码看起来应和下面的差不多:

<asp:GridView ID="Suppliers" runat="server" AutoGenerateColumns="False"
 DataKeyNames="SupplierID" DataSourceID="SuppliersDataSource" 
 EnableViewState="False">
 <Columns>
 <asp:TemplateField>
  <ItemTemplate>
  <asp:RadioButton ID="RowSelector" runat="server" 
   GroupName="SuppliersGroup" />
  </ItemTemplate>
 </asp:TemplateField>
 <asp:BoundField DataField="CompanyName" HeaderText="Supplier" 
  SortExpression="CompanyName" />
 <asp:BoundField DataField="City" HeaderText="City" 
  SortExpression="City" />
 <asp:BoundField DataField="Country" HeaderText="Country" 
  SortExpression="Country" />
 </Columns>
</asp:GridView>

  RadioButton的GroupName属性的作用在于:具有相同GroupName值的RadioButton控件被认为是一个组,在一个组里面只有一个控件可以被选择(即具有互斥性)。GroupName属性为radio button的名称特征(nameattribute)指定值,浏览器检查radio button的名称特征,再对其分组。

  在浏览器里查看页面,选择所有行,可以看出这些radio button并没有聚合(也就是不具有互斥性),如图11所示:

/uploads/allimg/c161121/14OI93Z42Y0-6255F.gif
图11:GridView的Radio Buttons没有聚合。

  不能聚合的原因在于:尽管将他们的GroupName属性设置为相同的,但提交的名称属性是不同的。在浏览器里点查看/源代码,检查这些radio button的代码:

<input id="ctl00_MainContent_Suppliers_ctl02_RowSelector" 
 name="ctl00$MainContent$Suppliers$ctl02$SuppliersGroup" 
 type="radio" value="RowSelector" />
<input id="ctl00_MainContent_Suppliers_ctl03_RowSelector" 
 name="ctl00$MainContent$Suppliers$ctl03$SuppliersGroup" 
 type="radio" value="RowSelector" />
<input id="ctl00_MainContent_Suppliers_ctl04_RowSelector" 
 name="ctl00$MainContent$Suppliers$ctl04$SuppliersGroup" 
 type="radio" value="RowSelector" />
<input id="ctl00_MainContent_Suppliers_ctl05_RowSelector" 
 name="ctl00$MainContent$Suppliers$ctl05$SuppliersGroup" 
 type="radio" value="RowSelector" />

  我们注意到,这里的name和id值和在属性窗口指定的准确值(exact values)相比,在开头多了一些其它ID值(比如id="ctl00_MainContent_Suppliers_ctl02_RowSelector" 和ID="RowSelector"相比),这些多出来的IDs值来自于这些 radio buttons的父级控件(parent controls)——GridViewRow、GridView、Content control以及Web Form。加上这些IDs的目的是使GridView控件里的每个rendered Web control(具体到本例就是这些radio button)具有唯一的id值和name值。

(编辑:江门站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读