2013-04-08 2 views
0

У меня есть форма asp.net, отображающая данные пользователя из базы данных Oracle, используя grid-view. Мне даже удалось получить поле чек-бокс в сетке ракурса, используя следующий шаблон ..Как использовать флажки в gridview?

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:CheckBox runat="server" ID="chck"/> 
    </ItemTemplate> 
    </asp:TemplateField> 

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

for (int i = 0; i < GridView1.Rows.Count; i++) 
     { 
      if (Convert.ToBoolean(GridView1.Rows[i].Cells[1].Value == true)) 
       GridView1.Rows.RemoveAt[i]; 
     } 

Однако при этом появляется сообщение об ошибке. По-видимому, каждый флажок в каждой строке должен иметь свой собственный уникальный индекс. Как мне добраться до него? Любая помощь будет оценена по достоинству. Thanx :)

+1

Какая ошибка? И почему вы сравниваете 'GridView1.Rows [i] .Cells [1] .Value' как' boolean'? Вы уверены, что? –

ответ

0

Вы должны найти контроль внутри вашего GridView строки с помощью FindControl

for (int i = 0; i < GridView1.Rows.Count; i++) 
{ 
    CheckBox cb1 = (CheckBox)GridView1.Rows[i].FindControls("chck"); 
     if(cb1.Checked) 
      GridView1.Rows.RemoveAt[i]; 
} 
+0

@sonergonul Спасибо за редактирование. –

0

Используйте поиск, чтобы получить контроль над флажков:

for (int i = 0; i < GridView1.Rows.Count; i++) 
    { 

     CheckBox chck = (CheckBox)GridView1.Rows[i].FindControl("chck"); 

     if (chck != null) 
     { 
     if (chck.Checked) 
     { 
      GridView1.Rows.RemoveAt[i]; 
     } 
     } 
    } 
+0

У меня есть флажок добавления в gridview, спасибо. Единственная проблема, с которой я сталкиваюсь, заключается в том, как я могу получить первичные ключи проверенных строк и использовать их для удаления записей? – Chopsy

+0

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

0

Это Aspx FIle:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    BackColor="White" BorderColor="#336699" BorderStyle="Solid" BorderWidth="1px" 
    CellPadding="0" CellSpacing="0" DataKeyNames="CategoryID" Font-Size="10" 
    Font-Names="Arial" GridLines="Vertical" Width="40%"> 

      <Columns>    
       <asp:TemplateField> 
        <ItemTemplate> 
         <asp:CheckBox ID="chkStatus" runat="server" 
          AutoPostBack="true" OnCheckedChanged="chkStatus_OnCheckedChanged" 
          Checked='<%# Convert.ToBoolean(Eval("Approved")) %>' 
          Text='<%# Eval("Approved").ToString().Equals("True") ? " Approved " : " Not Approved " %>' /> 
        </ItemTemplate>     
       </asp:TemplateField> 

       <asp:BoundField DataField="CategoryID" HeaderText="CategoryID" />     
       <asp:BoundField DataField="CategoryName" HeaderText="CategoryName" /> 
      </Columns> 

    <HeaderStyle BackColor="#336699" ForeColor="White" Height="20" /> 

</asp:GridView> 

Это CS Файл:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
    LoadData(); 
    } 
} 

private void LoadData() 
{ 
    string constr = @"Server=.\SQLEXPRESS;Database=TestDB;uid=waqas;pwd=sql;"; 
    string query = @"SELECT CategoryID, CategoryName, Approved FROM Categories"; 

    SqlDataAdapter da = new SqlDataAdapter(query, constr); 
    DataTable table = new DataTable(); 
    da.Fill(table); 

    GridView1.DataSource = table; 
    GridView1.DataBind(); 
} 

public void chkStatus_OnCheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox chkStatus = (CheckBox)sender; 
    GridViewRow row = (GridViewRow)chkStatus.NamingContainer; 


    string cid = row.Cells[1].Text; 
    bool status = chkStatus.Checked; 


    string constr = @"Server=.\SQLEXPRESS;Database=TestDB;uid=waqas;pwd=sql;"; 
    string query = "UPDATE Categories SET Approved = @Approved WHERE CategoryID = @CategoryID"; 

    SqlConnection con = new SqlConnection(constr); 
    SqlCommand com = new SqlCommand(query, con); 


    com.Parameters.Add("@Approved", SqlDbType.Bit).Value = status; 
    com.Parameters.Add("@CategoryID", SqlDbType.Int).Value = cid; 


    con.Open(); 
    com.ExecuteNonQuery(); 
    con.Close(); 

    LoadData(); 
} 
Смежные вопросы