【问题标题】:Change Label text in gridview on checking checkbox在选中复选框时更改gridview中的标签文本
【发布时间】:2015-04-11 08:02:08
【问题描述】:

我正在使用这个带有复选框和标签的 Gridview。现在我希望当我单击复选框时标签的文本必须更改。

<asp:GridView ID="grdData" runat="server" style="Text-align:center;">
  <Columns>
  <asp:TemplateField>
  <ItemTemplate>
  <asp:CheckBox ID="CheckBox1" runat="server" onclick="changeTextValue(this)"/>
  </ItemTemplate>
  <HeaderTemplate>
  <%--<asp:CheckBox ID="CheckBox2" runat="server" OnClick="CheckAllEmp(this)"/>--%>
  </HeaderTemplate>
  </asp:TemplateField>
  <asp:TemplateField>
  <HeaderTemplate>
  <asp:Label ID="Status_Header" runat="server" Text="Status" />
  </HeaderTemplate>
  <ItemTemplate>
  <asp:Label ID="Label1" runat="server" Text=0 ClientIDMode="Static"></asp:Label>
  </ItemTemplate>
  </asp:TemplateField>
  </Columns>
  </asp:GridView>

【问题讨论】:

  • 你尝试过什么?显示一些尝试过的代码。
  • 我创建了 Javascript 函数 function changeTextValue(chk) { var currentTextID = $(chk).parents('tr').find('input[type="Label"] [id$="Label1 "]'); if (chk.checked == true) currentTextID.val(1);否则 currentTextID.val(0); }
  • 在浏览器中查看页面时能不能把gridview的html贴出来?在浏览器中,您可以在页面上单击鼠标右键,然后选择查看源代码。

标签: asp.net gridview checkbox


【解决方案1】:

第一个问题

因为在html上渲染的标签会是:

<span id="grdData_ctl02_Label1" ClientIDMode="Static">1</span>

所以,你应该使用“span[id*='Label1']”来找出它:

function changeTextValue(chk) {
    var currentTextID = $(chk).parents("tr").find("span[id*='Label1']");
    if (chk.checked == true) {
        currentTextID.html(1);
    }
    else {
        currentTextID.html(0);
    }
}

第二个问题

网格视图

<asp:TemplateField>
    <ItemTemplate>
        <asp:CheckBox ID="CheckBox1" runat="server" onclick="changeTextValue(this)" />
    </ItemTemplate>
    <HeaderTemplate>
        <asp:CheckBox ID="CheckBox2" runat="server" OnClick="CheckAllEmp(this)" />
    </HeaderTemplate>
</asp:TemplateField>

Javascript

function CheckAllEmp(chk) {
    var currentTextID = $(chk).parents("table").find("span[id*='Label1']");
    var childCheckBoxID = $(chk).parents("table").find("input[id*='CheckBox1']");
    if (chk.checked == true) {
        currentTextID.html(1);
        childCheckBoxID.prop("checked", true);
    }
    else {
        currentTextID.html(0);
        childCheckBoxID.prop("checked", false);
    }
}

【讨论】:

  • 感谢安格斯的回答。您的代码运行良好。再帮我做一件事现在我想要一个标题复选框,并且在选中项目模板中的所有复选框时,应该选中并且标签的文本应该从 0 更改为 1。取消选中时从 1 更改为 0。请帮助我。我不知道该怎么做。
  • 谢谢,当我在数据库中保存值时,又出现了一个问题,即在没有任何更新的情况下采用相同的值
  • 感谢@Angus Chund,您的代码运行良好
【解决方案2】:

您使用 ClientIDMode="Static" 的原因是什么?

您必须在 your_program_file.cs 中创建函数 CheckAllEmp(this) 事件。 该函数中的代码将是这样的:

CheckAllEmp(...){
  Label1.Text="Something new";
}

【讨论】:

  • 我在 gridview 中有多行,所以每一行必须有相同的 id,这就是我使用 ClientIDMode ="Static"
【解决方案3】:

当你想在 GridView 上进行这种操作时,检查页面的 html 源代码总是好的。例如,在这种情况下,您的 gridview 将具有以下 html 代码:

    <table cellspacing="0" rules="all" border="1" id="grdData" style="border-collapse:collapse;text-align: center;">
       <tr>
            <th scope="col"></th>
            <th scope="col">
               <span id="grdData_Status_Header">Status</span>
            </th>
        </tr>
        <tr>
            <td>
               <input id="grdData_CheckBox1_0" type="checkbox" name="grdData$ctl02$CheckBox1" onclick="changeTextValue(this);" />
            </td>
            <td>
                <span id="Label1">Unique Perspective</span>
            </td>
        </tr>
        <tr>
            <td>
                <input id="grdData_CheckBox1_1" type="checkbox" name="grdData$ctl03$CheckBox1" onclick="changeTextValue(this);" />
            </td>
            <td>
                 <span id="Label1">Challenging</span>
             </td>
        </tr>
    </table>

如您所见,复选框和标签控件位于相邻的表格单元格中。您可以使用.parent().next() 访问包含标签控件的单元格。此外,您可能会看到标签呈现为跨度。因此,要获得标签控件,您可以使用:.parent().next().find('span')。最后一点是您可以使用跨度的.text 属性来更改其内容。请参阅下面的整个脚本:

    function changeTextValue(chk) {
        var currentTextID = $(chk).parent().next().find('span');
        if (chk.checked == true)
            currentTextID.text('1');
        else currentTextID.text('0');
    }

【讨论】:

  • next().find('span') 如果有 "Label2","Label3" 等,将影响所有标签。
  • @AngusChung 是的,我同意,但在当前情况下,它不会因为 user2747666 被认为是一个标签。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 2015-06-01
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多