Получить GridView выбранной строки DataKey в Javascript - PullRequest
9 голосов
/ 23 октября 2008

У меня есть GridView, который я могу выбрать строку. Затем у меня есть кнопка над сеткой под названием «Редактировать», которую пользователь может щелкнуть, чтобы открыть окно и редактировать выбранную строку. Таким образом, кнопка будет иметь код Javascript позади нее

function editRecord()
{
  var gridView = document.getElementById("<%= GridView.ClientID %>");
  var id = // somehow get the id here ???
  window.open("edit.aspx?id=" + id);
}

Вопрос в том, как получить идентификатор выбранной записи в JavaScript?

Ответы [ 4 ]

9 голосов
/ 23 октября 2008

Я решил, основываясь на ответе Джейсона. Я создал скрытое поле в виде сетки следующим образом:

<asp:TemplateField ShowHeader="False">
    <ItemTemplate>
      <asp:HiddenField ID="hdID" runat="server" Value='<%# Eval("JobID") %>' />
    </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField Visible="False">
    <ItemTemplate>
      <asp:LinkButton ID="lnkSelect" runat="server" CommandName="select" Text="Select" />
    </ItemTemplate>
</asp:TemplateField>

Тогда на OnRowDataBind есть код для установки выбранной строки

protected virtual void Grid_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // Click to highlight row
        Control lnkSelect = e.Row.FindControl("lnkSelect");
        if (lnkSelect != null)
        {
            StringBuilder click = new StringBuilder();
            click.AppendLine(m_View.Page.ClientScript.GetPostBackClientHyperlink(lnkSelect, String.Empty));
            click.AppendLine(String.Format("onGridViewRowSelected('{0}')", e.Row.RowIndex));
            e.Row.Attributes.Add("onclick", click.ToString());
        }
    }            
}

А потом в Javascript у меня есть такой код

<script type="text/javascript">

var selectedRowIndex = null;

function onGridViewRowSelected(rowIndex)
{        
    selectedRowIndex = rowIndex;
}

function editItem()
{   
    if (selectedRowIndex == null) return;

    var gridView = document.getElementById('<%= GridView1.ClientID %>');                
    var cell = gridView.rows[parseInt(selectedRowIndex)+1].cells[0];        
    var hidID = cell.childNodes[0];        
    window.open('JobTypeEdit.aspx?id=' + hidID.value);
}

</script> 

Работает угощение: -)

1 голос
/ 23 октября 2008

Исходя из ваших комментариев к ответу @ DaveK, в javascript вы можете установить идентификатор скрытого поля для clientId выбранной строки, когда пользователь выбирает его. Затем пусть ваша функция editRecord использует значение, установленное в скрытом поле формы.

1 голос
/ 23 октября 2008

1) измените вашу функцию JavaScript, чтобы использовать параметр

function editRecord(clientId)
{ ....

2) вывести вызов с помощью кнопки editRecord ... если вы хотите избежать работы с идентификаторами, сгенерированными .net, просто используйте простой

<input type="button" onclick="editRecord(your-rows-client-id-goes-here)" />
0 голосов
/ 18 января 2012

можно полностью избежать javascript, установив теги привязки, предварительно заполненные строкой запроса для каждой строки (хотя это повлияет на макет таблицы, для этого потребуется только один клик, а не 2 от пользователя)

вставить в шаблон сетки:

<asp:HyperLink runat="server" ID="editLink" Target="_blank"
   NavigateURL='<%# Eval("JobID","edit.aspx?id={0}") %>'> 
     Edit..
</asp:HyperLink>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...