使用javascript检查是否选择了gridview行

时间:2015-06-10 09:10:15

标签: javascript c# jquery asp.net gridview

我有以下情况:我有一个asp gridview,我用javascript实现了行选择(我可以通过点击它的每个单元格选择一行)。被解雇的事件是通过javascript点击,我遇到了一个问题。当我尝试编辑该行的内容时,通过行编辑命令,当我单击文本框以关注它时,再次触发行单击事件并且我失去了文本框的焦点。这样我就可以通过点击任何地方来选择网格视图,但我无法编辑该行的内容。

在后面的代码上启用完整行选择:

protected void gvMyQuizz_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.ToolTip = "Click to show the questions of the quiz";
            e.Row.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(this.gvMyQuizz,"Select$"+e.Row.RowIndex);
        }
    }

最有用的是如果我可以创建一个javascript函数,可以检查我被点击的行是否已被选中,所以我可以返回false,否则选择$ row,但我还没找到多少在线帮助。我需要通过javascript完成此操作。任何帮助将不胜感激。

更新

我更改了onclick事件中添加到行的属性:

protected void gvMyQuizz_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.ToolTip = "Click to show the questions of the quiz";
                e.Row.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(this.gvMyQuizz, "selectRow(" + e.Row.RowIndex+");");
            }
        }

使用Javascript:

function selectRow(index) {

            var $selected = $("#gvMyQuizz .alt");
            if ($selected.length == 0) {
                console.log('nothing');
            } else if ($selected.length == 1) {
                console.log('one');
            } else {
                console.log('problem');
            }
        }

单击行时我得到的一个函数,但只触发一次,我不知道原因:

$("[id*=gvMyQuizz] td").click(function () {
            console.log('clicked');
        });

有人可以弄清楚缺少的东西可以帮助解决问题。如果重复点击时触发的功能,我可以通过post检查它是否被选中。

1 个答案:

答案 0 :(得分:0)

被修改

如果要使用onclick事件处理行选择,最简单的选项是检查当前是否选中了您单击的行,以保持在服务器端运行隐藏字段。该字段将包含当前所选行的索引。您仍然需要触发回服务器的帖子,以使用类似

之类的行选择逻辑更新此值
<input id="inp_row_index" type="hidden" runat="server" />

function select(rowIndex) {
    document.getElementById('<%=inp_row_index.ClientID %>').value = rowIndex;
    <%=Page.GetPostBackEventReference(inp_row_index) %>
}

这基本上是对此处描述的方法的总结:http://www.codeproject.com/Tips/79822/How-to-handle-a-selected-row-in-GridView-on-the-cl