2014-01-09 3 views
0

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

Что включает в себя сохранение данных в моей базе данных.

FYI: флажки находятся внутри «GridView», а затем внутри «ItemTemplate».

Если вы не уверены в том, чего я пытаюсь достичь, просто спросите, и я постараюсь сделать его более ясным. Вот код, который я до сих пор:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Master" CodeBehind="TestCreation.aspx.vb" Inherits="SpellingBee.testcreation1" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<h1>Compile Your Tests</h1> 

<asp:GridView ID="CreateTest" runat="server" 
     AllowSorting="True" AutoGenerateColumns="False" CellPadding="4" 
     DataKeyNames="QuestionID" DataSourceID="SqlDataSource1" ForeColor="#333333" 
     GridLines="None"> 
    <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
    <Columns> 
     <asp:TemplateField HeaderText="Select"> 
      <ItemTemplate> 
       <asp:CheckBox ID="QuestionSelector" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="QuestionID" HeaderText="QuestionID" 
      InsertVisible="False" ReadOnly="True" SortExpression="QuestionID" /> 
     <asp:BoundField DataField="Answer" HeaderText="Answer" 
      SortExpression="Answer" /> 
     <asp:BoundField DataField="Question" HeaderText="Question" 
      SortExpression="Question" /> 
     <asp:BoundField DataField="SubjectID" HeaderText="SubjectID" 
      SortExpression="SubjectID" /> 
     <asp:TemplateField></asp:TemplateField> 
    </Columns> 
    <EditRowStyle BackColor="#999999" /> 
    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
    <SortedAscendingCellStyle BackColor="#E9E7E2" /> 
    <SortedAscendingHeaderStyle BackColor="#506C8C" /> 
    <SortedDescendingCellStyle BackColor="#FFFDF8" /> 
    <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
     ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
     SelectCommand="SELECT [QuestionID], [Answer], [Question], [SubjectID] FROM [Question]"> 
    </asp:SqlDataSource> 

    <asp:Button ID="QuestionCompiler" runat="server" Text="Compile Selected Questions" /> 

<h1>Preview Previous Tests</h1> 

</asp:Content> 

Вот код позади:

Public Class testcreation1 
    Inherits System.Web.UI.Page 

     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

      If Session.Item("User Type") <> "Teacher" Then 
       Response.Redirect("/") 
      End If 

     End Sub 

     Protected Sub QuestionCompiler_Click(sender As Object, e As EventArgs) Handles QuestionCompiler.Click 



     End Sub 
    End Class 
    <h1>Preview Previous Tests</h1> 

    </asp:Content> 

Заранее спасибо!

ответ

2

Так что вы хотите, чтобы все проверили CheckBoxes? Вы должны использовать GridViewRow.FindControl, чтобы получить их ссылки. Вы можете использовать этот небольшой запрос в вашей копи-функции:

IEnumerable<GridViewRow> allCheckedRows = CreateTest.Rows.Cast<GridViewRow>() 
    .Where(row => ((CheckBox)row.FindControl("QuestionSelector")).Checked); 

foreach(GridViewRow checkedRow in allCheckedRows) 
{ 
    // implement the save function for this row 
    int questionID = int.Parse(checkedRow.Cells[1].Text); 
    // ... 
} 

Упс, здесь есть версия VB.NET:

Dim allCheckedRows = From row In CreateTest.Rows.Cast(Of GridViewRow)() 
        Where DirectCast(row.FindControl("QuestionSelector"), CheckBox).Checked 

For Each checkedRow As GridViewRow In allCheckedRows 
    ' implement the save function for this row ' 
    Dim questionID As Int32 = Int32.Parse(checkedRow.Cells(1).Text) 
    ' ... ' 
Next 
+0

Спасибо! Работали очень хорошо, ценим помощь! :) – Callum

+0

+1 для использования linq, чтобы найти 'allCheckedRows'! –

0

Вы пытались использовать атрибут Checked на объекте Checkbox?

If QuestionSelector.Checked Then 
    DoSomething() 
End If 
+0

это ответ или комментарий? – zkanoca

+0

Как мне получить строку из отмеченного текстового поля для хранения в моей базе данных? – Callum

+0

@ Callum Ну, в таком случае вам следует начать читать некоторые базовые учебники, возможно, документацию MSDN. Googling «ссылка класса checkbox в asp.net» также может помочь. – nestedloop

0

вы можете попробовать это:

if (QuestionSelector.Checked == true) { 
    //Do Whatever 
} 

а также это:

В C#:

CheckBox chbx = GridView1.HeaderRow.FindControl("QuestionSelector") as CheckBox; 
    if (chbx != null && chbx.Checked){ 
     //Do Whatever 
    } 
+1

Я думаю, что его код находится в VB, а не C#. Не то, чтобы это имело значение, хотя ... – nestedloop

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