Avatar billede fileto Seniormester
30. august 2004 - 20:13 Der er 6 kommentarer og
1 løsning

Kan man endre en grids indhold programatisk

Hej, jeg er ved at lave en datagrid med en kolonne som danner et hyperlink til nogle andre data.

Men af og til findes de data ikke og så står der null i colonnen.
Når datagriden ser en null giver den mig bare et blank felt og så har jeg ikke noget hyperlink.

Er det muligt at programere datagriden til at den skal sætte noget tekst ind når feltet er null, så man stadig har
et hyperlink i feltet.


Dette er koden til den kolonne jeg gerne vil have til at vise et hyperlink selv om der står null i data.

#codestart
hcol[colix] = new HyperLinkColumn();
hcol[colix].HeaderText = "Review";
hcol[colix].DataTextField = "MovieRatingId";
hcol[colix].ItemStyle.ForeColor = Color.Gray;
hcol[colix].DataNavigateUrlField = "MovieRatingId";
hcol[colix].DataNavigateUrlFormatString = "enterreview.aspx?movierating={0}&reviewmode=oldreview";
#codeslut


Jeg skal bruge det til en filmliste hvor nogle af filmene har tilknyttet en filmanmældelse.
Men hvis der ikke er en anmældelse skal brugeren kunne oprette en ny anmældelse til filmen.
Derfor er det nødvændigt at der altid er et link så brugeren kan oprætte en anmældelse.

Kan dette lade sig gøre.
Avatar billede snepnet Nybegynder
30. august 2004 - 22:26 #1
Du kan også lige kigge her, og se om du kan bruge det til noget.
http://www.eksperten.dk/spm/533033

Jeg ved ikke om du kan fikse en hyperlinkcolumn så du får en defaulturl, hvis der ikke er angivet noget data, men det kan være du kan finde svare her :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuiwebcontrolshyperlinkcolumnmemberstopic.asp

mvh
Avatar billede fileto Seniormester
31. august 2004 - 13:34 #2
Tak for hjælpen, jeg kikker lige på det og vender tilbage.
Avatar billede fileto Seniormester
31. august 2004 - 15:57 #3
Hej igen
Jeg har kikket lidt på template column løsningen.
Men jeg har kun set webform løsninger og har ikke kunne implementere disse i C# code behind. Kænder du til nogen nogen eksempler som er skrevet i C# code behind og demonstrere templatecolumnløsningen.

Foreksempel et der viser hvordan et data item sættes til en anden værdi når current item er = en bestemt værdi, eller måske noget i den retning?

mvh
Avatar billede snepnet Nybegynder
31. august 2004 - 22:44 #4
hvad dit sidste spørgsmål angår, så er det nemmeste for dig nok bare at sikre det i en håndtering af din databinding.

altså... du abbonerer på ItemDataBound-evented, og gør hvad du nu synes der skal gøre - f.eks.

if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
  // tilføje en kontrol til en celle pr. condition
  if(e.Item.ItemIndex == 5)
      e.Item.Cells[0].Controls.Add(new LiteralControls("test"));
}

Hvad det første angår - synes jeg da at jeg er stødt på en del forskellige tuts på den slags.... Det er ikke så kompliceret at lave:

På simplest mulig form kunne det være sådan her :

public class SomeSillyTemplate : ITemplate
{
    public void InstantiateIn(Control container)
    {
        container.Controls.Add(new LiteralControl("SILLY"));
    }
}

Så kan du sætte din ItemTemplate på dit grid sådan her :

dg1.ItemTemplate = new SomeSillyTemplate();

Den kan jo så ikke bruges til så meget, og du skal jo sikkert håndtere databinding og den slags - men mere skal der egentlig ikke til for at starte op.

Med hensyn til at bruge en særlig kolonnetype, er det sådan set lige så enkelt... Her et eksempel på en templatecolumn (med databinding) :

// the template for the editable columns
public class EditableColumn : ITemplate
{
    private string _dataField;

    public EditableColumn(string dataField)
    {
        this._dataField = dataField;
    }

    public void InstantiateIn(Control container)
    {
        TextBox tb = new TextBox();
       
        tb.DataBinding+=new EventHandler(tb_DataBinding);

        container.Controls.Add(tb);           
    }

    private void tb_DataBinding(object sender, EventArgs e)
    {
        TextBox tb = (TextBox) sender;
        DataGridItem container = (DataGridItem) tb.NamingContainer;
        tb.Text = ((DataRowView)container.DataItem)[_dataField].ToString();
    }
}

Som du så kan indsætte i dit grid således :

TemplateColumn tbc = new TemplateColumn();
tbc.ItemTemplate = new EditableColumn(<someDataField>);
tbc.HeaderText= <someheader>;
       
theGrid.Columns.Add(tbc);

Det gik lidt stærkt - håber du kan bruge det til noget.
mvh
Avatar billede fileto Seniormester
01. september 2004 - 15:01 #5
Hej snepnet

Tak for hjælpen, nu fik jeg det som jeg ville have det. :-)

Men nu mangler jeg bare at det skal være et link. Jeg har prøvet at inføre en uri kontrol men det fik jeg ikke til at virke, ved du hvordan det gøres?

Nå, men du skal ivertfald have points.

Post lige et svar.


public class EditableColumn : ITemplate
{
    private string _dataField;

    public EditableColumn(string dataField)
    {
        this._dataField = dataField;
    }

    public void InstantiateIn(Control container)
    {
        Label tb = new Label();
     
        tb.DataBinding+=new EventHandler(tb_DataBinding);

        container.Controls.Add(tb);           
    }

    private void tb_DataBinding(object sender, EventArgs e)
    {
        Label tb = (Label) sender;
        DataGridItem container = (DataGridItem) tb.NamingContainer;
        tb.Text = ((DataRowView)container.DataItem)[_dataField].ToString();
        if (tb.Text == "")
        {
            tb.Text = "No";
        }
        else
        {
            tb.Text = "Yes";
        }
    }
}
Avatar billede fileto Seniormester
01. september 2004 - 16:39 #6
Hej snepnet
Jeg fandt selv ud af det hyperlinken. :-)
Endu en gang tak for hjælpen.
mvh
Avatar billede snepnet Nybegynder
01. september 2004 - 16:44 #7
Det var så lidt fileto - du siger bare til hvis der bliver noget :o)
mvh
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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