webForumDet fria alternativet

Checkbox i datagrid

.NET

7 svar · 318 visningar · startad av aleborg

Medlem sedan jan. 20013 341 inlägg
Frågan#1

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?

Medlem sedan dec. 20003 887 inlägg
#2

Byt från DataGridItemEventArgs e till EventArgs e.

Medlem sedan sep. 20011 914 inlägg
#3

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 :)

Medlem sedan jan. 20013 341 inlägg
#4

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!

Medlem sedan jan. 20013 341 inlägg
#5

någon?

Medlem sedan sep. 20026 425 inlägg
#6

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!

Medlem sedan jan. 20011 140 inlägg
#7

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" />
Medlem sedan sep. 20011 914 inlägg
#8

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);
}
258 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)