2011-03-29 236 views
4

我有一个动态的(允许添加行)一个ASP gridview,其中的一列中有一个下拉列表。我想根据数据输入过程中的下拉列表中的选择,在列中启用/禁用文本框。Asp.net动态GridView与下拉列表

任何帮助将不胜感激。

回答

3

你可以用jQuery轻松地做到这一点。通过一些修改,你可以完全按照你的想法工作。

首先,以下内容添加到您的<head>标签:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
    $(".ddlClass").change(function() { 
     var txt = $(this).closest("tr").find(".txtClass"); 
     if ($(this).val() == 0) { 
     txt.css("background", "#cccccc"); 
     txt.attr("disabled", "disabled"); 
     } 
     else { 
     txt.css("background", "#ffffff"); 
     txt.attr("disabled",""); 
     } 
    }); 
}); 

接下来,创建你的GridView和添加模板列的文本框和下拉列表。在下面的代码中,请注意下拉列表已被赋予类“ddlClass”,并且文本框被赋予了类“txtClass”。您可以根据需要更改这些设置。

<asp:gridview runat="server" ID="gvw" AutoGenerateColumns="false"> 
      <Columns> 
       <asp:BoundField DataField="field1" /> 
       <asp:BoundField DataField="field2" /> 
       <asp:TemplateField HeaderText="Name"> 
        <ItemTemplate> 
         <asp:TextBox runat="server" ID="txtName" CssClass="txtClass"></asp:TextBox> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField> 
        <ItemTemplate> 
         <select class="ddlClass"> 
          <option value="1">Enabled</option> 
          <option value="0">Disabled</option> 
         </select> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:gridview> 

.ready函数将一个click事件附加到每个dropdownlist类中的“ddlClass”。更改后,代码将在与下拉列表相同的行中找到类为“txtClass”的文本框,然后相应地启用/禁用。

+0

哇,我印象深刻。这是一些非常好的JQuery使用。我甚至不知道.closest和.find命令..多么惊人。 – 2011-03-29 18:13:37

+0

非常感谢。这个解决方案适合我。挑战在于它与表单上的日期选择器以及其中一个网格列中的其他日期选择器发生冲突。我可以使用相同的类方法将日历日期选择器附加到网格中的文本框中,也许在页面加载时。 – 2011-03-30 08:55:30

+0

它应该是可能的,但我们需要从你的aspx页面看到代码。我建议你打开一个新问题,并在其中发布你正在使用的确切代码。这将是了解你正在做什么的最好方法,然后我们将能够给你最好的答案。 – 2011-03-30 12:17:08

1

那么你可以使用Javascript,如果你熟悉这一点。我建议使用JQuery,因为它的查询语言是用于遍历DOM的。

但是,如果你不熟悉JavaScript那么我建议在SelectionChangedEvent处理您的DropDownList,然后在代码中添加SelectionChangedEvent落后于你的页面: 铸造发送对象到一个DropDownList,然后得到的父对象,这将是GridViewRow。

使用该GridViewRow,您可以使用FindControl方法获取对同一行中的TextBox的引用,然后可以启用它或禁用它。

如果您不喜欢页面刷新(回发),他们每次更改下拉列表中的选择,然后将您的网格包装在UpdatePanel中。

让我知道如果你很难与此,我会发布代码到上述解决方案之一。只要告诉我你最喜欢哪一个。

+0

Evan非常感谢你。我使用上面的JavaScript解决方案,它实际上对我很好。挑战在于它与表单上的日期选择器以及其中一个网格列中的其他日期选择器发生冲突。我是否可以在页面加载时使用相同的“类”方法将日历日期选择器附加到网格中的文本框中。 – 2011-03-30 08:57:02