webForumDet fria alternativet

Från VB till C#

.NET

11 svar · 992 visningar · startad av thevice

Medlem sedan dec. 2005198 inlägg
Frågan#1

Hejsan, jag håller på att försöka göra om min sida till C# från VB. Främst för att jag vill lära mig C# bättre.
Nu till problemet, jag har googlat, sökt i forumet + andra forum men hittar ingen stans där det står hur man använder e.Item.FindControl på det settet som jag använder det på i VB.

    Sub dlGalleryMembers_ItemdataBound(ByVal obj As Object, ByVal e As DataListItemEventArgs)

        If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then

            CType(e.Item.FindControl("hlEnlargeGalleryImageMembers"), HyperLink).NavigateUrl = "member.aspx?id=" + CType(e.Item.DataItem, System.Data.DataRowView).Row("id").ToString()
            CType(e.Item.FindControl("imgGalleryImageMembers"), Image).ImageUrl = "img/m_photos/" + CType(e.Item.DataItem, System.Data.DataRowView).Row("id").ToString() + "_thumbnail.jpg"
            CType(e.Item.FindControl("imgGalleryImageMembers"), Image).Width = "50"
            CType(e.Item.FindControl("imgGalleryImageMembers"), Image).Height = "50"

        End If

    End Sub

Jag vill fixa den koden till C#, jag försökte själv men det vart nog inte så bra, ger olika felmeddelanden hela tiden:

public void dlGalleryMembers_ItemdataBound(object obj, DataListItemEventArgs e)
{
    if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem)) {

        (e.Item.FindControl("hlEnlargeGalleryImageMembers") as HyperLink).NavigateUrl = "member.aspx?id=" + (e.Item.DataItem as System.Data.DataRowView).Row["id"].ToString();
        (e.Item.FindControl("imgGalleryImageMembers") as Image).ImageUrl = "img/m_photos/" + (e.Item.DataItem as System.Data.DataRowView).Row["id"].ToString() + "_thumbnail.jpg";
        (e.Item.FindControl("imgGalleryImageMembers") as Image).Width = 50;
        (e.Item.FindControl("imgGalleryImageMembers") as Image).Height = 50;

    }
}

Det är säkert 100 fel i den koden eftersom att den inte fungerar. Men jag har försökt iaf. (;

Tack på förhand!
/ TheVice

Medlem sedan juli 20011 304 inlägg
#2

Lite på känn bara, kan innehålla fel men ungefär:

private void dlGalleryMembers_ItemDataBound(object source,
                                   RepeaterCommandEventArgs e)
{
   if (e.Item.ItemType == ListItemType.Item|| e.Item.ItemType == ListItemType.AlternatingItem)
      {

          HyperLink lnk = (HyperLink )e.Item.FindControl("hlEnlargeGalleryImageMembers");
          System.Data.DataRowView dv = (System.Data.DataRowView)e.Item.DataItem;
          string id = dv.Row["id"].ToString();
          lnk.NavigateUrl = "member.aspx?id=" + id;
          lnk.Width = 50;
          //osv
      }

}

Man kan använda as ungefär som du gör men är man lite novis på c# ser det nog mest rörigt tror jag att man kan tycka :)

Medlem sedan mars 20023 561 inlägg
#3

Kanske?

public void dlGalleryMembers_ItemdataBound(object obj, DataListItemEventArgs e)
{
    if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem)) {

        (HyperLink)e.Item.FindControl("hlEnlargeGalleryImageMembers").NavigateUrl = String.Format("member.aspx?id={0}", (DataRowView)e.Item.DataItem.Row["id"].ToString());
        (Image)e.Item.FindControl("imgGalleryImageMembers").ImageUrl = String.Format("img/m_photos/{0}_thumbnail.jpg", (DataRowView)e.Item.DataItem.Row["id"].ToString());
        (Image)e.Item.FindControl("imgGalleryImageMembers").Width = 50;
        (Image)e.Item.FindControl("imgGalleryImageMembers").Height = 50;
    }
}
Medlem sedan apr. 200487 inlägg
#4

Josef skrev:

Kanske?

public void dlGalleryMembers_ItemdataBound(object obj, DataListItemEventArgs e)
{
    if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem)) {

        (HyperLink)e.Item.FindControl("hlEnlargeGalleryImageMembers").NavigateUrl = String.Format("member.aspx?id={0}", (DataRowView)e.Item.DataItem.Row["id"].ToString());
        (Image)e.Item.FindControl("imgGalleryImageMembers").ImageUrl = String.Format("img/m_photos/{0}_thumbnail.jpg", (DataRowView)e.Item.DataItem.Row["id"].ToString());
        (Image)e.Item.FindControl("imgGalleryImageMembers").Width = 50;
        (Image)e.Item.FindControl("imgGalleryImageMembers").Height = 50;
    }
}

Nästan, men tror du måste ha en till parantes för att det ska gå.

public void dlGalleryMembers_ItemdataBound(object obj, DataListItemEventArgs e)
{
    if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem)) {

        ((HyperLink)e.Item.FindControl("hlEnlargeGalleryImageMembers")).NavigateUrl = String.Format("member.aspx?id={0}", ((DataRowView)e.Item.DataItem).Row["id"].ToString());
        ((Image)e.Item.FindControl("imgGalleryImageMembers")).ImageUrl = String.Format("img/m_photos/{0}_thumbnail.jpg", ((DataRowView)e.Item.DataItem).Row["id"].ToString());
        ((Image)e.Item.FindControl("imgGalleryImageMembers")).Width = 50;
        ((Image)e.Item.FindControl("imgGalleryImageMembers")).Height = 50;
    }
}
Medlem sedan juni 20019 519 inlägg
#5

Kan rekommenderar att du besöker: http://www.carlosag.net/Tools/CodeTranslator/Default.aspx

Smart verktyg som kan skriva om kod från VB.NET -> C# eller C# ->VB.NET

Medlem sedan dec. 2005198 inlägg
#6

Ojoj vad fort det gick att få svar. (;

Tack voigtann1 för den länken! Den kommer hjälpa mig mycket!

Testade med wallabous hjälp men fick felmeddelandet:

System.InvalidCastException: Unable to cast object of type 'System.Data.Common.DbDataRecord' to type 'System.Data.DataRowView'.

Line 50:                 ((HyperLink)e.Item.FindControl("hlEnlargeGalleryImageMembers")).NavigateUrl = String.Format("member.aspx?id={0}", ((DataRowView)e.Item.DataItem).Row["id"].ToString());

Sedan så testade jag att köra koden i på länken. Men då vart det felmeddelandet:

CS0118: 'System.Data.DataRowView.Row' is a 'property' but is used like a 'method'

Line 50:                 ((HyperLink)(e.Item.FindControl("hlEnlargeGalleryImageMembers"))).NavigateUrl = ("member.aspx?id=" + ((System.Data.DataRowView)(e.Item.DataItem)).Row("id").ToString());

Har noll koll vad dem menar med både felmeddelandena?

EDIT

Svarade visst för snabbt, såg att i koden som dem skrev så hade dem ("id") ändrade till ["id"] då försvann felet på den raden.
Men fick sedan fel på raden under:

CS0029: Cannot implicitly convert type 'string' to 'System.Web.UI.WebControls.Unit'

((Image)(e.Item.FindControl("imgGalleryImageMembers"))).Width = "50";

Det är samma felmeddelande som jag fick när jag försökte själv.

EDIT

Är verkligen för snabb. ;P

Tog bort paranteserna på 50 och då försvannf elmeddelandet. Men är på samma fel igen som jag fick på wallabous kod. Hjälp? (;

Tack på förhand!
/ TheVice

Medlem sedan juni 200511 inlägg
#7

Detta borde fungera om det är pixlar du ska använda.

((Image)(e.Item.FindControl("imgGalleryImageMembers"))).Width = Unit.Pixel(50);

Och om det är procent.

((Image)(e.Item.FindControl("imgGalleryImageMembers"))).Width = Unit.Percentage(50);
Medlem sedan dec. 2005198 inlägg
#8

tack Sorting, men jag löste det problemet genom att ta bort paranteserna på 50. Problemet är nu det hära:

thevice skrev:

System.InvalidCastException: Unable to cast object of type 'System.Data.Common.DbDataRecord' to type 'System.Data.DataRowView'.

Line 50:                 ((HyperLink)e.Item.FindControl("hlEnlargeGalleryImageMembers")).NavigateUrl = String.Format("member.aspx?id={0}", ((DataRowView)e.Item.DataItem).Row["id"].ToString());

Kan felet bero på den andra koden som jag har? Koden som ladda med Page_Load.

Tack på förhand!
/ TheVice

Medlem sedan mars 20023 561 inlägg
#9

Vad händer om du bara skriver DataRow istället för DataRowView?

Medlem sedan juli 20011 084 inlägg
#10

Eller vad händer om du skriver "DbDataRecord" istället för "DataRowView"? :)

Sedan går det väl bra om du bara skriver.

((DbDataRecord)e.Item.DataItem)["id"].ToString()
Medlem sedan dec. 2005198 inlägg
#11

Tack mozilla det fungerade!

Nu har jag bara en fråga till, att göra på det här settet är det bättre för prestandan eller sämre?

Medlem sedan jan. 2001373 inlägg
278 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)