【问题标题】:call OnSelectedIndexChanged from GridView before other function在其他函数之前从 GridView 调用 OnSelectedIndexChanged
【发布时间】:2016-02-23 12:36:14
【问题描述】:

我有两个 GridView。用户可以从第一个 GridView 中选择一行,然后将显示基于所选 GridView ID 的列表。

第一个网格:

第二个网格:

第一个 GridView 的代码:

<asp:GridView  style="width:75%"  
                        ID="gvCVRT" 
                        ShowHeaderWhenEmpty="true"
                        CssClass="tblResults" 
                        runat="server" 
                        OnSelectedIndexChanged="gridviewParent_SelectedIndexChanged"   
                        OnRowDataBound="gvCVRT_RowDataBound"                          
                        DataKeyField="ID" 
                        DataKeyNames="ChecklistID"
                        AutoGenerateColumns="false"
                        allowpaging="false"
                        AlternatingRowStyle-BackColor="#EEEEEE">
                        <HeaderStyle CssClass="tblResultsHeader" />
                        <Columns>
                            <asp:BoundField DataField="ChecklistID" HeaderText="ID"  ></asp:BoundField> 
                            <asp:CommandField ShowSelectButton="True" HeaderText="Select" />
                            <asp:BoundField DataField="ChecklistDate" HeaderText="Checklist Date" dataformatstring="{0:dd/MM/yyyy}"></asp:BoundField>
                            <asp:BoundField DataField="User" HeaderText="User" ></asp:BoundField>
                            <asp:BoundField DataField="Note" HeaderText="Note" ></asp:BoundField>
                            <asp:TemplateField HeaderText="Delete" ItemStyle-CssClass="tblRowDelete">
                                <ItemTemplate>
                                    <asp:LinkButton ID="btnDelete"
                                                runat="server" OnClientClick="event.stopPropagation()" OnClick="btnDeleteCVRT_Click"></asp:LinkButton>
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>

后面的代码:

protected void gvCVRT_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            lookupCVRT work = (lookupCVRT)e.Row.DataItem;
            GridView gv = sender as GridView;

            string checklistid = work.ChecklistID.ToString();

            e.Row.Attributes.Add("ID", "gvCVRT_" + work.ID);
            LinkButton btnDelete = (LinkButton)e.Row.FindControl("btnDelete");
            btnDelete.CommandArgument = checklistid;

            if (work.ID != null)
            {
                int index = gv.Columns.HeaderIndex("Select");
                if (index > -1)
                {
                    e.Row.Cells[index].Attributes.Add("class", "gvCVRTRow");
                    e.Row.Cells[index].ToolTip = "Click here to Edit Checklist";
                    e.Row.Cells[index].Attributes.Add("style", "color:blue;cursor:pointer;cursor:hand");
                }
            }
        }
    }

gridviewParent_SelectedIndexChanged 的代码:

protected void gridviewParent_SelectedIndexChanged(object sender, EventArgs e)
    {
       List<lookupCVRT> workDetails = lookupCVRT.GetChecklistItemsByChecklistID(Company.Current.CompanyID, ParentID.ToString(), gvCVRT.SelectedDataKey.Value.ToString());
        gvCVRTDetails.DataSource = workDetails;
        gvCVRTDetails.DataBind();
        FireJavascriptCallback("setArgAndPostBack ();");
    }

Javascript:

$(".gvCVRTRow").off();
        $(".gvCVRTRow").click(function (e) {
            ShowAddEditCVRT(this, "Edit");
        });

function ShowAddEditCVRT(sender, AddEdit) {
        $("#divCVRTDetails").fadeIn(300); 
}

对不起,它有很多代码,但我想准确地展示正在发生的事情。当我将代码设置为int index = gv.Columns.HeaderIndex("Select"); 时,它首先进入javascript 函数ShowAddEditCVRT,它尝试显示第二个网格divCVRTDetails。但我需要先运行gridviewParent_SelectedIndexChanged 方法,因为这会将第二个网格与从第一个网格中选择的 ID 绑定。

我可以让第二个网格首先绑定的唯一方法是将代码更改为:int index = gv.Columns.HeaderIndex("Checklist Date");。 所以用户必须先单击选择(绑定网格),然后单击日期单元格以显示网格。

所以我的问题是,在调用 javascript 函数之前是否有运行 gridviewParent_SelectedIndexChanged 方法?

【问题讨论】:

    标签: javascript c# jquery asp.net gridview


    【解决方案1】:

    有关我在哪里找到此信息的更多详细信息,请参阅下面的链接。

    http://www.codeproject.com/Questions/246366/run-javascript-from-side-server-in-asp-net-and-csh

    绑定gridview后,您可以从服务器端添加javascript。

    protected void Page_Load(object sender, EventArgs e)    {
        String script = @"<script language=""Javascript"">
                        $(".gvCVRTRow").off();
                        $(".gvCVRTRow").click(function (e) {
                             ShowAddEditCVRT(this, "Edit");
                        });
    
                        function ShowAddEditCVRT(sender, AddEdit) {
                            $("#divCVRTDetails").fadeIn(300); 
                        }
                     </script>";
        Page.RegisterClientScriptBlock("experiment", script);
        gvCVRT.Attributes.Add("DataBound", "TestJScript()");
    

    我相信这会取代你的 FireJavascriptCallback("setArgAndPostBack ();");

    编辑 我更改了代码以更好地匹配您提供的内容以及代码的放置位置。我认为它应该在页面加载下进行。我还更改了 gvCVRT.Attributes.Add 以使其在 gvCVRT 数据绑定时运行 javascript。

    【讨论】:

    • 这很奇怪,使用位于我为我工作的链接上的通用测试表格。您是直接从我发布的内容中复制和粘贴的吗?另外,您是否在运行时收到错误消息?
    • 是的,我直接从您的代码中复制并粘贴。首先,我收到错误错误Newline in constant; expected,所以我将所有内容移到了一行。但我仍然收到$(".gvCVRTRow") 和“编辑”以及使用“”的任何部分的错误 `
    • 到目前为止,我还没有找到问题所在,如果您的 javascript 调用的功能是在 C# 中完成然后由 JavaScript 函数调用,会更容易吗?看看这个链接。 Calling a code-behind function from JavaScript
    • @user123456789 您可以尝试的另一件事是将 javascript 中的所有双引号替换为单引号,因为 js 对它们的处理方式相同(大多数情况下)。
    • @user123456789 FireJavascriptCallback() 住在哪里?我一直在尝试谷歌它并找不到它。另外,您的答案不是您已经在做的吗? (我没有足够的代表在您的回答下发表评论。)
    【解决方案2】:

    对此的答案是我使用FireJavascriptCallback("myFunction();"); 调用了javascript,然后将我需要的javascript 代码放入此函数中。

    FireJavascriptCallback 是一个函数:

     protected void FireJavascriptCallback(string JSFunctionName)
        {
            System.Web.UI.ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "Callback", JSFunctionName, true);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      相关资源
      最近更新 更多