aleborgMedlem sedan jan. 20013 341 inlägg Jag har en datagrid med en checkbox på varje rad och försöker att få OnCheckedChanged att fungera
<asp:datagrid id="gridFolderList" CssClass="table_600_Grey" Runat="server" AutoGenerateColumns="False" DataKeyField="FPath">
<Columns>
...
<asp:TemplateColumn HeaderText="R">
<ItemTemplate>
<asp:CheckBox id="Fread" runat="server" OnCheckedChanged="Fread_oncheckedchanged" AutoPostBack="True"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
...
</Columns>
</asp:datagrid>
public void Fread_oncheckedchanged(object sender, DataGridItemEventArgs e)
{
CheckBox cb = (CheckBox)sender;
Response.Write(e.Item.ItemIndex);
}
Men får felet
CS0123: Method 'WebCreSiterWeb.user.tools_file_manager.Fread_oncheckedchanged(object, System.Web.UI.WebControls.DataGridItemEventArgs)' does not match delegate 'void System.EventHandler(object, System.EventArgs)'
Vad gör jag fel?
Engine^Medlem sedan dec. 20003 887 inlägg Byt från DataGridItemEventArgs e till EventArgs e.
DinoMedlem sedan sep. 20011 914 inlägg Re: Checkbox i datagrid
DataGridItemEventArgs är för datagriden, ckeckboxen har endast EventArgs och därifrån kan du inte få fram DataGridens e.Item.ItemIndex.
public void Fread_oncheckedchanged(object sender, EventArgs e)
{
CheckBox cb = (CheckBox)sender;
if(cb.Checked){
Response.Write(cb.ID);
}
}
red// en minut för sen :)
aleborgMedlem sedan jan. 20013 341 inlägg Problemet är att jag måste ha fram den i public void Fread_oncheckedchanged, det är tack vare den som jag vet vad som har kryssats i och ska ändras i den framtida koden!
Jag tycker att koden ser korrekt ut, men måste fråga om du har testat med att sätta AutoPostBack = "False" i checkboxen? Jag har haft lite problem med just AutoPostBack och har löst det genom att sätta värdet till True|False beroende på hur min kod skulle fungera. :)
Testa i alla fall!
Jag har gjort så här där jag har dropdownlistor som uppdaterar en textbox.
Du kanske kan göra på ett liknande sätt med dina checkboxar
Public Sub getNumber1(ByVal sender As Object, ByVal e As EventArgs)
Dim griditem As DataGridItem
For Each griditem In dgBTeam.Items
Dim ddlNumber As DropDownList = griditem.FindControl("ddlBPlayer")
Dim _spelarID As Integer = ddlNumber.SelectedItem.Value
Dim tbNumber As TextBox = griditem.FindControl("tbBNumber")
Dim objGetNumber As New CreateprotokollBusinessL()
Dim Number As String = objGetNumber.getNumber(_spelarID)
tbNumber.Text = Number
Next
End Sub
Dropdownlisten ser ut så här
<asp:dropdownlist id="ddlBPlayer" runat="server" datatextfield="Namn" datavaluefield="spelarID" autopostback="True" onselectedindexchanged="getNumber" />
DinoMedlem sedan sep. 20011 914 inlägg Här är en fuling lösning. :)
private void gridFolderList_ItemCreated(object sender, DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
TableCell td = (TableCell)e.Item.Controls[0];
Control c = td.Controls[1]; // Kan bli tvungen att byta ut indexet i Controls[i]
if(c is CheckBox)
{
CheckBox cb = (CheckBox)c;
cb.TabIndex = (short)e.Item.ItemIndex;
}
}
}
public void Fread_oncheckedchanged(object sender, EventArgs e)
{
CheckBox cb = (CheckBox)sender;
Response.Write(cb.TabIndex);
}