2013-06-13 3 views
0

у меня есть этот код:параметр Take из ListView

protected void Button1_Click(object sender, EventArgs e) 
    { 
     System.Data.SqlClient.SqlConnection sc = new System.Data.SqlClient.SqlConnection(GetConnectionString()); 
     { 
      System.Data.SqlClient.SqlCommand cmd; 
      sc.Open(); 
      cmd = new System.Data.SqlClient.SqlCommand("SET IDENTITY_INSERT Zapas OFF INSERT INTO Zapas (Zapas.Sezona,.....)SELECT Zapas.Sezona,... FROM Zapas WHERE [email protected];", sc); 
      cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@ID", System.Data.SqlDbType.Text)).Value = (TextBox)ListView1.FindControl("box1"); 

      cmd.ExecuteNonQuery(); 
      sc.Close(); 
      Response.Redirect("~/Zapasy_seznam.aspx"); 
     } 
    } 

Мне нужно принять значение ID из ListView, но с этим кодом У меня есть эта ошибка:

...expects the parameter '@ID', which was not supplied.... 

Эта часть моей ListView .. .

<asp:ListView ID="ListView1" runat="server" DataKeyNames="ID_zapas" DataSourceID="SqlDataSource1" style="text-align: center ">  
        <AlternatingItemTemplate> 
         <tr style="background-color: #e9ffe9;color: #284775;text-align:center"> 
          <td> 
           <asp:TextBox ID="box1" runat="server" Text='<%# Eval("ID_zapas") %>' Visible="false" /> 

...

<td style="width:50px;background-color:white"> 
           <asp:LinkButton ID="Button1" runat="server" OnClick="Button1_Click" Visible='<%# HttpContext.Current.User.IsInRole("admin") %>' CausesValidation="False" OnClientClick="javascript: return confirm('Opravdu chcete zápas zkopírovat?');"> 
            <asp:Image ID="Image2" runat="server" ImageUrl="~/Icons/copy.png" Width="29px" Height="29px" ToolTip="Zkopírovat zápas" /> 
           </asp:LinkButton> 
          </td>      
         </tr> 
        </AlternatingItemTemplate> 

У вас есть идея?

ответ

1

Согласно комментариям, пожалуйста, попробуйте следующее:

using System.Data.SqlClient; 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    var box1 = (TextBox)((LinkButton)sender).Parent.FindControl("box1"); 
    using (var sc = new SqlConnection(GetConnectionString())) 
    { 
     using (var cmd = sc.CreateCommand()) 
     { 
      sc.Open(); 
      cmd.CommandText = "SET IDENTITY_INSERT Zapas OFF INSERT INTO Zapas (Zapas.Sezona,.....)SELECT Zapas.Sezona,... FROM Zapas WHERE [email protected];"; 
      cmd.Parameters.AddWithValue("@ID", box1.Text); 

      cmd.ExecuteNonQuery(); 
      sc.Close(); 
      Response.Redirect("~/Zapasy_seznam.aspx"); 
     } 
    } 
} 

При использовании средства управления данными известно, такие как ListView здесь элементы управления создаются с помощью автоматических уникальных идентификаторов в элементе данных. Это означает, что вы можете иметь более одного из одного элемента управления (например, «box1» в этом случае) на странице, на которую должен ссылаться элемент данных (((LinkButton)sender).Parent, который равен ListViewDataItem, представляющий строку).

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

+0

Теперь у меня есть эта ошибка: «System.Web.UI.Control» не содержит определения для «Текст» и никакого метода расширения «Текст», принимающий первый аргумент типа «System.Web.UI.Control» (вам не хватает директивы using или ссылки на сборку?) – Kate

+0

Какой тип управления «ListView1.FindControl (« box1 »)' return? Это элемент управления TextBox? Вы передали его в «TextBox», но указанная ошибка указывает, что это не TextBox. – Codesleuth

+0

это текстовое поле: Kate

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