【问题标题】:ASP.NET Gridview how to Access Checkbox on fieldASP.NET Gridview 如何访问字段上的复选框
【发布时间】:2015-08-14 15:45:19
【问题描述】:

我有一个 ASP.NET Web 窗体页面,我有一个字段,我从 SQL Server 数据库加载一些数据。 我还通过这种方式向该字段添加了一个 Checkbox 控件:

if (!e.Row.Cells[8].Text.Equals("---"))
{                        
    CheckBox chkbox = new CheckBox();
    chkbox.ID = "SelectedTel8_" + e.Row.Cells[1].Text;
    chkbox.Text = e.Row.Cells[8].Text;
    e.Row.Cells[8].Controls.Add(chkbox);
    chkbox.Attributes.Add("OnClick", "javascript:selectCheckBox(this);");
    chkbox = null;
}
if (!e.Row.Cells[9].Text.Equals("---"))
{
    CheckBox chkbox = new CheckBox();
    chkbox.ID = "SelectedTel9_" + e.Row.Cells[1].Text;
    chkbox.Text = e.Row.Cells[9].Text;
    e.Row.Cells[9].Controls.Add(chkbox);
    chkbox.Attributes.Add("OnClick", "javascript:selectCheckBox(this);");
    chkbox = null;
}
if (!e.Row.Cells[10].Text.Equals("---"))
{
    CheckBox chkbox = new CheckBox();
    chkbox.ID = "SelectedTel10_" + e.Row.Cells[1].Text;
    chkbox.Text = e.Row.Cells[10].Text;
    e.Row.Cells[10].Controls.Add(chkbox);
    chkbox.Attributes.Add("OnClick", "javascript:selectCheckBox(this);");
    chkbox = null;
}

在这个页面上,我还创建了一个按钮行:

<Columns>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:Button ID="ButtonSendSMS" runat="server" Text="EnviarSms" CommandName="EnviarSms1" OnClientClick="javascript:SendSmsTel(this);" /> 
        </ItemTemplate>
    </asp:TemplateField>                
</Columns>

它调用一个名为“SendSmsTel”的javascript函数。

我需要做的是:

每当用户单击按钮时,我都需要从该行的其他字段中检索信息以在其他操作中使用它。

问题是我找不到访问该行元素的方法。当我在给定行上有控件时,我对它们进行了标识,然后我可以使用

window.document.getElementById()

但是没有控件的数据字段呢?

[link]我尝试了很多东西,但都没有奏效。不知道我做错了什么: [链接]How to access gridview cell value with javascript [链接]How to get Column Value for a given Row within GridView using javascript in asp.net? [链接]Why is Container.DataItem being passed as a string literal?

如何访问单击按钮所在行的内容? 如果可以,请教我 C# 和 JavaScript。 谢谢。

【问题讨论】:

  • 你到底想在这里完成什么?
  • 使用 jquery 你可以做类似$('row_id_here').find('input[type=checkbox]'); 的事情。您也可以在没有 jquery 的情况下做到这一点,但需要做更多的工作。这种方法有问题吗?
  • 我还是不知道怎么用JQuery,我不知道我可以用它来做到这一点。
  • 应用程序很简单,我在 gridView 中有一个数据列表(姓名和 3 个电话)。每行都有一个按钮。用户选择其中一部电话,然后单击该行上的按钮,然后触发事件以向所选电话发送短信。然后它必须在另一个数据库表中插入该消息的日志。这很简单!当我单击按钮时,我只是想不出一种从整个列中获取数据的方法。

标签: javascript c# asp.net gridview webforms


【解决方案1】:

在 C# 中:
- 您可以触发 OnClick 事件,例如

 <asp:TemplateField HeaderText="Product>
                <ItemTemplate>
                    <asp:LinkButton ID="lb_filter" ToolTip="Product"  runat="server"  CommandArgument='<%#Eval("ProductID") %>'
                        OnClick="lb_filter_Click"><img src="resources/images/search_button.png" style="width:22px;" /></asp:LinkButton>
                </ItemTemplate>
                <HeaderStyle HorizontalAlign="center" Width="70px" />
                <ItemStyle HorizontalAlign="center" Width="70px" />
            </asp:TemplateField>

在代码中:

protected void lb_filter_Click(object sender, EventArgs e)

{

    var linkbuntton = (LinkButton)sender;
    if (linkbuntton != null)
    {
        int ProductId =int.Parse(linkbuntton.CommandArgument);
        var objProduct = _entities.Products.Where(o => o.ProductID == ProductId).FirstOrDefault();
        //TODO : so now you have got content of that row

    }

}

或者您可以在 gridview 中进行 foreach,例如使用复选框:

foreach (GridViewRow row in gvAwards.Rows)
        {
            var cb = (CheckBox)row.FindControl("cbCheck");
            if (cb.Checked)
            {
                int _ID = int.Parse(gvAwards.DataKeys[row.RowIndex].Value.ToString());
                var item = _entities.Awards.Where(c => c.AwardsID == _ID).FirstOrDefault();
                //TODO: so now, you can get contents of that row
            }
        }

在代码 Javascript 中: 您可以为每行中的每个控件添加唯一的类,前缀/后缀是 keyId 例如:

  <asp:TemplateField HeaderText="add">
                <ItemTemplate>
                    <a href="#" class="href_<%# Eval("BannerLocationID") %>" onclick="ShowinsertlistForm('<%# Eval("BannerLocationID") %>')"  >
                       <img src="resources/images/add.png" style="width:22px;" /></a>
                </ItemTemplate>
                <HeaderStyle HorizontalAlign="center" Width="60px" />
                <ItemStyle HorizontalAlign="center" Width="60px" />
            </asp:TemplateField>

在 javascript 代码中: 您可以通过 css 类轻松获取元素

    function ShowinsertlistForm(Id)
{
    var href = document.getElementsByClassName('href_'+Id);
    var checkbox = document.getElementsByClassName('checkbox_'+Id);
    //TODO : some thing like that
}

【讨论】:

  • 那么,按钮列的 HTML 会是这样的吗? (关于 JavaScript 解决方案)
  • 你能解释一下这个 CommandArgument='' 是什么吗?我的意思是..它的作用..提前谢谢。
猜你喜欢
  • 2011-10-30
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 2016-12-17
  • 2011-12-11
相关资源
最近更新 更多