Jag har en datagrid där jag skriver ut namn. Nu skulle jag vilja skapa en checkbox till varje namn.
Någon som har ett exempel på hur man gör detta?
9 svar · 268 visningar · startad av andreas_lindh
Jag har en datagrid där jag skriver ut namn. Nu skulle jag vilja skapa en checkbox till varje namn.
Någon som har ett exempel på hur man gör detta?
Antingen med en CheckBoxList eller så hittar du på en egen lösning med t.ex en repeater eller liknande. Men jag skulle föredra CheckBoxList som är otroligt smidigt.
vet du om det finns något exempel på hur man använder checkboxlist ihop med en datagrid?
Du vill binda en CheckBoxList inne i en DataGrid? I så fall skapar du en funktion som retunerar datan som ska vara i CheckBoxListen och anropar den funktion från DataSource='<%# minfunktion %>'
Har ingen färdig kod att visa dock...
renholm skrev:
Du vill binda en CheckBoxList inne i en DataGrid? I så fall skapar du en funktion som retunerar datan som ska vara i CheckBoxListen och anropar den funktion från DataSource='<%# minfunktion %>'
Har ingen färdig kod att visa dock...
Men då får han en checkboxlist för varje item... Antingen har du en datagrid med en checkbox för varje rad, eller så har du bara en checkboxlist utan en datagrid (om du inte ska ha flera checkboxar för varje item i din datagrid förstås).
Släng in en checkbox i en itemtemplate, sedan är det nog lättast om du till varje namn har en kolumn med en bool kopplad som du fyller datagriden med och sedan vidare till checkboxen:
<itemtemplate>
<asp:checkbox checked='<%# DataBinder.Eval(Container.DataItem, "bool")%>'>
</itemtemplate>
Hur ska jag då göra för att ge checkboxarna olika namn? eller går det att ha samma namn på alla?.
Har tänkt läga in alla namn som är ikryssade i en annan tabell i databasen
Du behöver inte ha något namn på dem. För att veta vilken checkbox som kryssas i/ur så kollar du istället vilket item i din datagrid som startade eventet! Kan vara smidigt att sätta autopostback="true" på din checkbox däremot. :)
Så här gjorde jag på en liknande funktion förresten, kanske kan ge någon idé:
<ItemTemplate>
<asp:CheckBox id="memberCheck" AutoPostBack="True" Enabled="true" OnCheckedChanged="CheckedChanged" Checked='<%# DataBinder.Eval(Container.DataItem, "bool") %>' Runat="server"></asp:CheckBox>
</ItemTemplate>
protected void CheckedChanged(object sender, System.EventArgs e) {
//På vilken rad checkboxen du tryckte på finns
int Row = ((DataGridItem)((CheckBox.sender).Parent.Parent).ItemIndex;
//vilken du sedan kan använda för att ex ta ut en datakey (i detta fallet id för den rad jag ville uppdater)
int myID = (int)MyDataGrid.DataKeys[Row];
}
jag testade att använda din kod
Public row As Integer
public check_id As Integer
Public Sub insert(ByVal sender As Object, ByVal e As EventArgs)
row = ((DataGridItem)((CheckBox.sender).Parent.Parent).ItemIndex)
check_id = datagrid1.DataKeys(row)
End Sub
men visual studio klagar på DataGridItem och checkbox.sender
DataGridItem' is a type and cannot be used as an expression.
och
sender is not a member of 'System.Web.UI.WebControls.CheckBox'.
Nu har hag hittat det här exemplet som är precis som jag vill ha det. http://aspalliance.com/das/dg_checkbox.html .
Men jag får det inte att fungera
min datagrid
<asp:datagrid datakeyfield="id" id="Datagrid2" cellspacing="0" cellpadding="0"
borderwidth="0" gridlines="None"
showfooter="false" showheader="true"
alternatingitemstyle-backcolor="#cccccc"
itemstyle-bordercolor="#ffffff"
autogeneratecolumns="false" runat="server">
<columns>
<asp:templatecolumn>
<headertemplate>
<asp:table runat="server" cellpadding="0" cellspacing="0" borderwidth="0" cssclass="rubrik">
<asp:tablerow>
<asp:tablecell width="20px">#</asp:tablecell>
<asp:tablecell width="200px">Namn</asp:tablecell>
<asp:tablecell width="45px">Spelar</asp:tablecell>
<asp:tablecell width="60px">Femma</asp:tablecell>
<asp:tablecell width="45px">kapten</asp:tablecell>
</asp:tablerow>
</asp:table>
</headertemplate>
<itemtemplate>
<asp:table runat="server" cellpadding="0" cellspacing="0" borderwidth="0">
<asp:tablerow>
<asp:tablecell width="20px"><%# DataBinder.Eval(Container, "DataItem.nummer") %></asp:tablecell>
<asp:tablecell width="200px"><asp:label id="namn" text='<%# DataBinder.Eval(Container.DataItem, "namn") %>' runat=server /></asp:tablecell>
<asp:tablecell width="45px">
<asp:CheckBox id="spelar" Runat="server" />
</asp:tablecell>
<asp:tablecell width="45px">
<asp:dropdownlist id="femma" runat="server" width="55">
<asp:listitem selected="True" value="0">Mv</asp:listitem>
<asp:listitem value="1">1:a</asp:listitem>
<asp:listitem value="2">2:a</asp:listitem>
<asp:listitem value="3">3:e</asp:listitem>
<asp:listitem value="4">4:e</asp:listitem>
</asp:dropdownlist>
</asp:tablecell>
<asp:tablecell width="45px"></asp:tablecell>
</asp:tablerow>
</asp:table>
</itemtemplate>
</asp:templatecolumn>
</columns>
</asp:datagrid>
Suben insert
Public Sub insert(ByVal sender As Object, ByVal e As EventArgs)
'Dim tbmatchid As TextBox = e.Item.FindControl("match_id")
'Dim matchid As String = tbmatchid.Text
'Dim dplkapten As DropDownList = e.Item.FindControl("tbkapten")
'Dim kapten As Integer = CInt(dplkapten.SelectedItem.Value)
'Dim dplFemma As DropDownList = e.Item.FindControl("femma")
'Dim femma As Integer = CInt(dplFemma.SelectedItem.Value)
'Dim dplposition As DropDownList = e.Item.FindControl("position")
'Dim position As Integer = CInt(dplposition.SelectedItem.Value)
'Dim spelar As CheckBox = e.Item.FindControl("spelar")
'Dim checkid As Integer = datagrid1.DataKeys(CType(e.Item.ItemIndex, Integer))
Dim myDataGridItem As DataGridItem
Dim spelar As System.Web.UI.WebControls.CheckBox
Dim strStoreID As String
Dim strStoreName As String
Dim lblStatus As Label
For Each myDataGridItem In datagrid2.Items
spelar = myDataGridItem.FindControl("spelar")
If spelar.Checked Then
strStoreName = CType(myDataGridItem.FindControl("namn"), Label).Text
lblStatus.Text += "namnet <b>" & strStoreName & "</b>"
End If
Next
'Response.Write(checkid)
'Dim objcmd1 As New OleDbCommand _
' ("SELECT * from trupper where id = " & checkid & "", objconn)
' Dim dr As OleDbDataReader
' objconn.Open()
' Dim id1 As String
' If dr.Read() = True Then
' spelar_id = dr("id")
' lag_id = dr("lag_id")
' nummer = dr("nummer")
' If spelar.Checked = True Then
' Dim strsql As String = "insert into matchprotokoll_spelare(match_id,lag_id,spelar_id,nummer,position, femma,kapten) values (" & matchid & "," & lag_id & "," & spelar_id & "," & nummer & "," & position & "," & femma & ",'" & kapten & "')"
' Dim objcmd As New OleDbCommand(strsql, objconn)
' objconn.Close()
' objcmd.Connection.Open()
' objcmd.ExecuteNonQuery()
' objcmd.Connection.Close()
' Else
' 'Ta(bort)
' End If
'End If
End Sub
Jag får inga felmeddelanden men det skrivs inte ut något.
Någon som kan se något fel?