Получение значения столбца gridview в качестве параметра для функции javascript - PullRequest
1 голос
/ 31 марта 2010

У меня есть сетка с определенным количеством столбцов, а столбец идентификатора, из которого я хочу получить значение, в настоящее время установлен в visible = false. Другой столбец - это столбец TemplateField (LinkButton), и, когда пользователь нажимает кнопку, он извлекает значение из столбца ID и передает его в одну из моих функций javascript.

WebForm:

<script language=javascript>
    function openContent(contentID)
    {               
    window.open('myContentPage.aspx?contentID=' + contentID , 'View Content','left=300,top=300,toolbar=no,scrollbars=yes,width=1000,height=500');
    return false;
    }
</script>

<asp:GridView ID="gvCourse" runat="server" AutoGenerateColumns="False" OnRowCommand="gvCourse_RowCommand" 
OnRowDataBound="gvCourse_RowDataBound" BorderStyle="None" GridLines="None">
<RowStyle BorderStyle="None" />
<Columns>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:LinkButton ID="lnkContent" runat="server" 
             CommandName="View" CommandArgument='<%#Eval("contentID") %>' Text='<%#Eval("contentName") %>'>
             </asp:LinkButton>  
        </ItemTemplate>
    </asp:TemplateField>
    <asp:BoundField DataField="contentID" HeaderText="contentID" ReadOnly="True" 
        SortExpression="contentID" Visible="False" />
    <asp:BoundField DataField="ContentName" HeaderText="ContentName" 
        ReadOnly="True" SortExpression="ContentName" Visible="False" />
</Columns>
<AlternatingRowStyle BorderStyle="None" />

Код позади:

protected void gvCourse_RowCommand(object sender, GridViewCommandEventArgs e)
{   
    if (e.CommandName == "View")
    {
        intID = Convert.ToInt32(e.CommandArgument);
    }
}

protected void gvCourse_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        ((LinkButton)e.Row.FindControl("lnkContent")).Attributes.Add("onclick", "return openContent('" + intID + "');");
    }
}

верно, нет, я пытаюсь получить intID на основе выбранного пользователем элемента, поэтому, когда пользователь нажимает на кнопку ссылки, он открывает всплывающее окно с использованием javascript и идентификатор будет использоваться в качестве строки запроса.

Ответы [ 2 ]

1 голос
/ 31 марта 2010

спасибо за помощь, ребята, но, похоже, я нашел решение по одному из других опубликованных вопросов.

просто нужно заменить это:

((LinkButton)e.Row.FindControl("lnkContent")).Attributes.Add("onclick", "return openContent('" + intID + "');");

на это (нужно указать DataKeyNames):

((LinkButton)e.Row.FindControl("lnkContent")).Attributes.Add("onclick", "return openContent('" + ((GridView)sender).DataKeys[e.Row.RowIndex].Value.ToString() + "');");
1 голос
/ 31 марта 2010

Вы можете просто использовать свойство OnClientClick LinkButton и создать правильный вызов вашего метода JavaScript с правильным аргументом. Что-то вроде

<asp:LinkButton ID="lnkContent" runat="server" ...
    OnClientClick='openContent(<%#Eval("contentID") %>)' ... />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...