Avatar billede nat Nybegynder
19. januar 2006 - 17:49 Der er 13 kommentarer og
1 løsning

c# datagrid selectedvalue

Hej Eksperter,

Jeg har et datagrid hvori jeg har følgende:

<ItemTemplate>
<asp:ImageButton id="ImgButton" runat="server" ImageUrl="../Images/ikon.gif" OnClick="ImgButton_Click"></asp:ImageButton>&nbsp;
</ItemTemplate>

i ImgButton_Click vil jeg gerne hive fat i værdien der er på index 1 og lægge det i en string. Jeg havde håbet at jeg kunne gøre følgende:

public void ImgButton_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
string text = Datagrid1.SelectedItem.Cells[1].Text;
}

Men så får jeg en error "Object reference not set to an instance of an object."

Hvordan får jeg fat i den selecterede værdi fra gridet?
Avatar billede innercitydk Nybegynder
19. januar 2006 - 17:58 #1
Prøv det her:

Datagrid1.SelectedItem.ToString();

istedet for

Datagrid1.SelectedItem.Cells[1].Text;

Vh
Avatar billede dr_chaos Nybegynder
19. januar 2006 - 18:00 #2
prøv lige at vise hele koden for dit gridview
Avatar billede nat Nybegynder
20. januar 2006 - 09:34 #3
innercitydk: så får jeg stadigvæk fejlen "Object reference not set to an instance of an object. "
Avatar billede nat Nybegynder
20. januar 2006 - 09:39 #4
dr_chaos:

<ASP:DATAGRID id="Datagrid1" runat="server" CssClass="dataGrid" EnableViewState="true" CellPadding="0" AutoGenerateColumns="False">
  <Columns>
    <ASP:TemplateColumn OmitSorting="True">
    <ItemTemplate>
      <asp:ImageButton id="ImgButton" runat="server" ImageUrl="../Images/ikon.gif" OnClick="ImgButton_Click"></asp:ImageButton>&nbsp;
    </ItemTemplate>
    </ASP:TemplateColumn>
    <ASP:BoundColumn DataField="ID" HeaderText="ID" visible="true"></ASP:BoundColumn>
    <ASP:tBoundColumn DataField="DATE" HeaderText="Dato" DataFormatString="{0:d}" width="90"></ASP:BoundColumn>
    <ASP:BoundColumn DataField="TYPE" HeaderText="Type" width="125"></ASP:BoundColumn>
  </Columns>
</ASP:DATAGRID>
Avatar billede dr_chaos Nybegynder
20. januar 2006 - 10:22 #5
nye datagrid:
<ASP:DATAGRID id="Datagrid1" runat="server" OnItemCommand="Test" CssClass="dataGrid" EnableViewState="true" CellPadding="0"  AutoGenerateColumns="False">
  <Columns>
    <ASP:TemplateColumn OmitSorting="True">
    <ItemTemplate>
      <asp:ImageButton id="ImgButton" runat="server" ImageUrl="../Images/ikon.gif"></asp:ImageButton>&nbsp;
    </ItemTemplate>
    </ASP:TemplateColumn>
    <ASP:BoundColumn DataField="ID" HeaderText="ID" visible="true"></ASP:BoundColumn>
    <ASP:tBoundColumn DataField="DATE" HeaderText="Dato" DataFormatString="{0:d}" width="90"></ASP:BoundColumn>
    <ASP:BoundColumn DataField="TYPE" HeaderText="Type" width="125"></ASP:BoundColumn>
  </Columns>
</ASP:DATAGRID>
</ASP:DATAGRID>
Avatar billede dr_chaos Nybegynder
20. januar 2006 - 10:22 #6
funktion i code behind:

protected void Test(object sender, DataGridCommandEventArgs e)
    {
        System.Diagnostics.Debug.WriteLine(e.Item.ItemIndex);
    }
Avatar billede dr_chaos Nybegynder
20. januar 2006 - 10:23 #7
på denne måde får du indexet ud på den row hvor du har trykket.
Avatar billede nat Nybegynder
20. januar 2006 - 10:48 #8
dr_chaos: kan se at der mangler min onclick event på imgbutton: jeg har følgende:

<asp:ImageButton id="ImgButton" runat="server" ImageUrl="../Images/ikon.gif" OnClick="ImgButton_Click">

Så hvordan får den fat i Test når jeg klikker på imgbutton? Når jeg klikker nu sker der ingen ting ud over at billedet opdaterer..
Avatar billede dr_chaos Nybegynder
20. januar 2006 - 10:51 #9
du får den med i OnItemCommand="Test".
prøv evt at ændre
System.Diagnostics.Debug.WriteLine(e.Item.ItemIndex);
til Response.Write(e.Item.ItemIndex);
Avatar billede nat Nybegynder
20. januar 2006 - 11:07 #10
Når jeg klikker på min imgbutton sker der ingenting udover at siden loader igen...

Den kommer ikke ind i koden (jeg har sat et breakpoint så jeg kan aflæse værdien)

JEg ahr nu følgende på aspx-siden: <asp:ImageButton id="ImgButton" runat="server" ImageUrl="../Images/ikon.gif" OnItemCommand="Test">

og denne i aspx.cs:

protected void Test(object sender, DataGridCommandEventArgs e)
    {
        string id = e.Item.ItemIndex.ToString();
    }
Avatar billede dr_chaos Nybegynder
20. januar 2006 - 11:17 #11
har du husket at tilføje
this. osv event ligesom når man lavet et click event på en knap ?
Avatar billede dr_chaos Nybegynder
20. januar 2006 - 11:20 #12
altså
this.Datagrid1.ItemCommand+=new DataGridItemEventHandler(Test);

i InitializeComponent()
Avatar billede nat Nybegynder
20. januar 2006 - 11:56 #13
Nej den manglede jeg!

Nu kommer jeg fint ind i funktionen, men id'et får ikke det rigtige id, den får bare værdien 0 - hvilket egenligt giver mening nok - får hvorfra ved den at når der klikkes på inmgbutton skal den have værdien fra fatagrid1 index [1] imgbutton ligger på index [0] - derfor bruger jeg i stedet:

string id = e.Item.Cells[1].Text;

Smider du et svar dr_chaos? Og tak for hjælpen
Avatar billede dr_chaos Nybegynder
20. januar 2006 - 12:34 #14
svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester