2015-08-14 3 views
1

У меня есть страница ASP.NET Web Forms, и у меня есть поле, где я загружаю некоторые данные из базы данных SQL Server. Я также добавить элемент управления Checkbox в поле таким образом:ASP.NET Gridview как установить флажок в поле

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».

Что мне нужно сделать, это:

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

проблема в том, что я не могу найти способ доступа к этим элементам этой строки. Когда у меня есть элементы управления в данной строке, я ID'ed их, а затем я мог бы использовать

window.document.getElementById() 

Но что о полях данных без контроля?

[ссылка] Я пробовал много вещей, но никто не работает. Не знаю, что я делаю неправильно: [ссылка] 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. Спасибо.

+0

Что именно вы пытаетесь достичь здесь? – ElGavilan

+0

С jquery вы можете сделать что-то вроде '$ ('row_id_here'). Find ('input [type = checkbox]');'. Вы можете сделать это без jquery, но просто больше работы. Есть ли проблема с таким подходом? – Andrei

+0

Я все еще не знаю, как использовать JQuery, я не знал, что могу использовать его для этого. –

ответ

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 

    } 

}

или вы можете Foreach в GridView, например, с флажком:

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: Вы можете добавить уникальный класс для каждого элемента управления в строке с префиксом/surfix является 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 
} 
+0

Итак, HTML для кнопки colunm был бы таким? (относительно решения JavaScript) " OnClientClick = "javascript: SendSmsTel (это, '<% # Eval (" BannerLocationID ")%>');" /> –

+0

Да, это правильно – nolonger

+0

Не могли бы вы объяснить мне, что это CommandArgument = '<% # Eval ("ProductID")%>' is ?? Я имею ввиду ... что это делает. Спасибо заранее. –

Смежные вопросы