2013-05-13 16 views
1

伊夫添加該代碼能在這個網格複選框列複選框值:獲取在asp.net

<Columns> 
    <asp:TemplateField HeaderText="Visitor" HeaderStyle-Width="20" FooterStyle-HorizontalAlign="Center"> 
     <ItemTemplate> 
      <asp:CheckBox ID="myCheckBox" runat="server"/> 
     </ItemTemplate> 
     <FooterStyle HorizontalAlign="Center" /> 
     <HeaderStyle Width="20px" /> 
     <ItemStyle HorizontalAlign="Center" /> 
    </asp:TemplateField> 

,我想獲得一個複選框的值,但我得到「對象引用未設置爲對象的實例「。錯誤。 這裏是我嘗試調用它,我得到的錯誤:

Dim checkb As String 
For Each row As GridViewRow In orderGrid.Rows 
    Dim chk As CheckBox = CType(row.FindControl("myCheckBox"), CheckBox) 
    **checkb = Request.Form("myCheckBox")** 
Next row 

如何獲得複選框的正確值的任何想法?

+0

先定義值然後嘗試取值! – 2013-05-13 14:03:49

+0

當我點擊複選框然後點擊發送時,該值就會被定義。我只想檢查這些值,因爲其中存在一個錯誤 – 2013-05-13 14:07:21

+0

顯示代碼,您正在定義複選框值 – 2013-05-13 14:09:47

回答

1

在我看來,你可能需要遍歷單元格而不是行;如果你在行數據綁定事件中做了它,那麼在c#中它將會像(CheckBox)(e.Row.Cells [1] .FindControl(「myCheckBox」))一樣。

+0

在vb它應該是Dim chk As CheckBox = CType(gridView.Rows(i).Cells(j).FindControl(「 myCheckBox「),CheckBox),或者你可以嵌套foreach循環 – 2013-05-13 14:09:05

1

我在這裏記住了,但是我想如果你爲複選框定義了「Value」屬性,那麼你就可以在PostBack上訪問它。但是,您必須在Attributes集合中顯式查找它。

更新: 我最初表示它將是「InputAttributes」集合。我測試了一下,發現我記錯了。它實際上是您需要使用的「屬性」集合。

Dim checkb As String 
For Each row As GridViewRow In orderGrid.Rows 
    Dim chk As CheckBox = CType(row.FindControl("myCheckBox"), CheckBox) 
    Dim v as String = chk.Attributes.Item("value") 
Next row 

定義的值可能是在您的標記將其定義爲簡單的例子...

<asp:CheckBox ID="myCheckBox" runat="server" value="Red" /> 

如果您填寫它將從數據綁定值,那麼你可以使用Eval ()函數...

<asp:CheckBox ID="myCheckBox" runat="server" value='<%# Eval("myID") %>' /> 

然後你也可以通過後面的代碼來做到這一點。由於您使用了GridView,因此在GridView的RowDataBound事件處理程序中,您可以獲取對該行中CheckBox的引用並在其中定義其值。

CheckBox1.Attributes.Item("value") = "some_value" ' Could be pulled from whatever data item is tied to your GridView 
+0

你可以給我一個例子來說明如何定義數值和你的意思嗎? – 2013-05-13 14:29:47

+0

我使用定義值的示例更新了我的代碼。我也更正了我最初提到的收藏品的名稱。 – Rick 2013-05-13 15:02:26

+0

我剛剛閱讀你對另一個答案的評論。你想獲得價值,還是隻是試圖確定它是否已被檢查?要確定它是否已被檢查,你只需看看「Checked」屬性。在你的代碼中,你會看到chk.Checked - 它會相應地爲True/False。 – Rick 2013-05-13 15:28:09

2

基本上,你可以循環雖然GridView1.Rows並獲得Checkboxes

注:我在C#中編寫並使用converter轉換,所以我的VB代碼可能有點奇怪。

enter image description here

<asp:GridView runat="server" ID="GridView1" 
    AutoGenerateColumns="False" DataKeyNames="Id"> 
    <Columns> 
     <asp:TemplateField HeaderText="Visitor"> 
      <ItemTemplate> 
       <asp:CheckBox ID="myCheckBox" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField HeaderText="FirstName" DataField="FirstName" /> 
     <asp:BoundField HeaderText="LastName" DataField="LastName" /> 
    </Columns> 
</asp:GridView> 
<asp:Button runat="server" ID="SubmitButton" 
    OnClick="SubmitButton_Click" Text="Submit" /> 

Public Class User 
    Public Property Id() As Integer 
     Get 
      Return m_Id 
     End Get 
     Set 
      m_Id = Value 
     End Set 
    End Property 
    Private m_Id As Integer 
    Public Property FirstName() As String 
     Get 
      Return m_FirstName 
     End Get 
     Set 
      m_FirstName = Value 
     End Set 
    End Property 
    Private m_FirstName As String 
    Public Property LastName() As String 
     Get 
      Return m_LastName 
     End Get 
     Set 
      m_LastName = Value 
     End Set 
    End Property 
    Private m_LastName As String 
End Class 

Protected Sub Page_Load(sender As Object, e As EventArgs) 
    If Not IsPostBack Then 
     Dim collection = New List(Of User)() With { _ 
      New User() With { _ 
       .Id = 1, _ 
       .FirstName = "John", _ 
       .LastName = "Doe" _ 
      }, _ 
      New User() With { _ 
       .Id = 2, _ 
       .FirstName = "Marry", _ 
       .LastName = "Doe" _ 
      }, _ 
      New User() With { _ 
       .Id = 3, _ 
       .FirstName = "David", _ 
       .LastName = "Newton" _ 
      } _ 
     } 

     GridView1.DataSource = collection 
     GridView1.DataBind() 
    End If 
End Sub 

Protected Sub SubmitButton_Click(sender As Object, e As EventArgs) 
    For Each row As GridViewRow In GridView1.Rows 
     Dim checkBox = TryCast(row.FindControl("myCheckBox"), CheckBox) 
     If checkBox.Checked Then 
      ' Get the ID of selected row 
      Dim id = GridView1.DataKeys(row.DataItemIndex).Value 
     End If 
    Next 
End Sub 
0

試試這個代碼,這將給予選擇的ID在CS代碼。

<asp:TemplateField HeaderText="All"> 
    <HeaderStyle Width="3%" HorizontalAlign="Center" VerticalAlign="Middle" /> 
     <ItemStyle HorizontalAlign="center" VerticalAlign="Middle" /> 
    <HeaderTemplate> 
     <input id="chkAll" type="checkbox" name="chkAll" onclick="javascript: checkall();" /> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <input id="chkBox" name="chkBox" type="checkbox" value="<%# DataBinder.Eval(Container.DataItem, "CategoryId") %>" onclick="javascript: checkManual();" /> 
    </ItemTemplate> 
</asp:TemplateField> 

和單一選擇

function checkManual() { 
    var intCheckVal; 
    intCheckVal = 1; 
    for (intCounter = 0; intCounter < (document.getElementsByName('chkBox').length); intCounter++) { 
     if (document.getElementsByName("chkBox")[intCounter].checked == false) 
      intCheckVal = 0; 
    } 
    if (intCheckVal == 1) 
     document.getElementById("chkAll").checked = true; 
    else 
     document.getElementById("chkAll").checked = false; 
} 

和檢查所有

function checkall() { 
    for (intCounter = 0; intCounter < (document.getElementsByName('chkBox').length); intCounter++) { 
     document.getElementsByName("chkBox")[intCounter].checked = document.getElementById("chkAll").checked; 
    } 
} 
在按鈕單擊事件CS代碼

現在你可以得到所有選擇複選框值使用

javascript函數
string MultiIDs = Request.Form["chkBox"].Replace("'", ""); 

檢查一下,這將肯定有效。

謝謝。