Har en datagrid som ser ut så här: Du har en Unit.Parse som du kan använda för att göra en Sträng till ett unit värde vilket krävs i detta fall. Testade det nu: aaa sorry såg inte att du satte det som ett attrib... För att styra vidden på bilden från en variabel sätter jag följande: Jag had enog letat upp knappen i Item Created eventet för DataGriden, och sedan satt dess värde Vore bra om du förtydligade lite Johan. Är inte någon jätte stjärna på .net. Hur letar jag upp knappen i Item Created eventet för gridden. :-) Ok Johan. Skall leta på forumet. Tacksam för hjälpen :) Lägger in ett nytt inlägg om jag inte hittar något så kan du kanske lägga in lite kod då du får tid. Har lite pseudo kod här dock... som kan vägleda dig. Testade detta nu: Du måste alltid kolla om du får tag i den, annars får du null felet. Se min kod ovan. Jag blir galen:( får det inte att fungera.. Var det så här du menade Johan? Har gjort en ItemDataBound för att ge Imagebuttonen ett värde, men den kör ju aldrig denna sub. Ska inte den subben köras när den anropas via namnet från datagridden? Tex OnItemDataBound="dtgObjekt_ItemDataBound" NU FUNKAR DET.. Skapade en ny .aspx sida, la in en OnItemBound till datagridden samt en imagebutton. I subben dtgObjekt_ItemDataBound la jag in koden:Styra vidden på en imagebutton
Namn Typ Måndag Tisdag Onsdag Torsdag Fredag
A6767 Projektor bild bild bild bild bild
B6766 Bärbar bild bild bild bild bild
Där bild är en imagebutton (stapel).
Jag vill styra bredden på bilderna beroende på vissa värden som plockas från en DB. Min kod för detta är:
.aspx
<ItemTemplate>
<table>
<tr>
<td><FONT face="Tahoma" size="1">FM</FONT></td>
<td><FONT face="Tahoma" size="1">EM</FONT></td>
</tr>
<tr>
<td class="kantlinje" width="20px">
<asp:ImageButton ID="fm" Height="3px" Width="7px"" CommandName="bokafm" Runat="server" ImageUrl="images\stapel.gif"></asp:ImageButton></td>
<td class="kantlinje" width="20px">
<asp:ImageButton ID="måndag" Width='<%#dtgObjekt.Attributes("widd")%>' CommandName="bokaem" Runat="server" ImageUrl="images\stapel.gif">
</asp:ImageButton></td>
</tr>
</table>
</ItemTemplate>
.codebehind
Har skapat ett dataset med värden i..........
If myDataset.Tables("Objekt").Rows.Count > 0 Then
Dim myTable As New DataTable("objekt")
Dim i As Integer
'myTable.Columns.Add("objektid", System.Type.GetType("System.String"))
myTable.Columns.Add("namn", System.Type.GetType("System.String"))
myTable.Columns.Add("typ", System.Type.GetType("System.String"))
myDataset.Tables.Add(myTable)
Dim bredd As String = "10px" 'Testar med att sätta statiskt värde (kommer från db egentligen)
For i = 0 To myDataset.Tables("Objekt").Rows.Count - 1
Dim myRow As DataRow = myTable.NewRow
'myRow("objektid") = bok.bokid
myRow("namn") = myDataset.Tables("Objekt").Rows(i).Item("Namn")
myRow("typ") = myDataset.Tables("Objekt").Rows(i).Item("Typ")
dtgObjekt.Attributes("widd") = bredd 'Skickar 10 px till imagebuttonens attribut
myTable.Rows.Add(myRow)
Next
dtgObjekt.DataSource = myDataset.Tables("Objekt")
dtgObjekt.DataBind()
Detta genererar felet:
Value of type 'String' cannot be converted to 'System.Web.UI.WebControls.Unit'
on line: <asp:ImageButton ID="måndag" Width='<%#dtgObjekt.Attributes("widd")%>' CommandName="bokaem" Runat="server" ImageUrl="images\stapel.gif">
Har testat köra "" istället för ' ' men utan lycka. Vad kan detta bero på?Sv: Styra vidden på en imagebutton
....width = Unit.Parse(minString);
Mvh JohanSv:Styra vidden på en imagebutton
Dim bredd as string = "10px"
dtgObjekt.Attributes("widd") = unit.parse(bredd)
men får fortfarande felet: value of type 'system.web.ui.webcontrols.unit' cannot be coverted to stringSv: Styra vidden på en imagebutton
Men vad är det för skumt attribut du sätter?
Widd?
Mvh JohanSv:Styra vidden på en imagebutton
<asp:ImageButton ID="måndag" Width='<%#dtgObjekt.Attributes("widd")%>' CommandName="bokaem" Runat="server" ImageUrl="images\stapel.gif">
och sen i code behind...
Dim bredd as string = "10px"
dtgObjekt.Attributes("widd") = bredd
Hur ska man annars göra??
MVH/ ErikSv: Styra vidden på en imagebutton
via koden.
ImageButton.Width = Uint.Parse(DataItem...blabla);
Mvh JohanSv:Styra vidden på en imagebutton
Uppskattar att du tar dig tid.
MVh ESv: Styra vidden på en imagebutton
Jag har lite ont om tid själv just nu, därför kan jag inte göra så utförliga svar :-(
Du får in parametern DataGridItemEventArgs där du har ett item objekt. Detta objekt
skall vara controllen i sig. Från denna kan du kolla genom alla dess childs om någon av dessa är av typen
ImageButton om så är fallet så har du fått tag i din ImageButton och kan casta den för att sätta attributen.
Du kan leta efter ItemCreated eller ItemBound här i forumet jag vet att jag gett svar på detta innan.
Om du inte finner svaret eller annan hinner före kan jag skriva lite kod senare idag om du vill? just nu sitter jag lite dumt till :-(
Mvh JohanSv:Styra vidden på en imagebutton
MVH/ ErikSv: Styra vidden på en imagebutton
<code>
protected void ArticleDataGrid_ItemDataBound(object sender,DataGridItemEventArgs e)
{
foreach(Control x in e.Item.Cells[5].Controls)
{
ImageButton imageButton x as ImageButton;
if(imageButton != null)
' har knappen
}
}
</code>
Mvh JohanSv:Styra vidden på en imagebutton
1. Skapade en ItemCreated sub för datagridden i codebehind
<code>
Private Sub dtgObjekt_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dtgObjekt.ItemCreated
Dim bredd As String = "10px"
CType(e.Item.FindControl("måndag"), ImageButton).Width = Unit.Parse(bredd)
End Sub
</code>
och i .ascx
<code>
<asp:ImageButton ID="måndag" CommandName="bokaem" Runat="server" ImageUrl="images\stapel.gif"></asp:ImageButton></td>
</code>
för då följande fel...
Object reference not set to an instance of an object.
On line:
Dim bredd as string = "10px"
CType(e.Item.FindControl("måndag"), ImageButton).Width = Unit.Parse(bredd) 'här blir feletSv: Styra vidden på en imagebutton
as kanske inte finnsi VB .Net? så får du nog göra en GetType och kolla om den är samma som en
ImageButton typ.
Mvh JohanSv:Styra vidden på en imagebutton
<code>
Private Sub dtgObjekt_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dtgObjekt.ItemDataBound
Dim item As ListItemType = e.Item.ItemType
If item = ListItemType.Item Or item = ListItemType.AlternatingItem Then
Dim imgbutton As ImageButton = CType(e.Item.FindControl("Måndag"), ImageButton)
imgbutton.Width = Unit.Pixel(10)
End If
</code>
i html..
<code>
<asp:datagrid id="dtgObjekt" OnItemDataBound="dtgObjekt_ItemDataBound" runat="server" Width="704px" AutoGenerateColumns="False">
<ItemTemplate>
<asp:ImageButton ID="måndag" width = '<%# DataBinder.Eval(Container.DataItem, "bredd") %>' CommandName="bokafm" Runat="server" ImageUrl="images\stapel.gif"></asp:ImageButton></td>
</ItemTemplate>
</asp:datagrid>
</code>
När man debuggar stannar den på InitializeComponent(). Går inte ens in i form load.
känner mig helt lost nu. Sv: Styra vidden på en imagebutton
<code>
Dim item As ListItemType = e.Item.ItemType
Dim pnl As ImageButton
Select Case item
Case ListItemType.AlternatingItem, ListItemType.Item
pnl = CType(e.Item.FindControl("mondayfm"), ImageButton)
pnl.Width = Unit.Pixel(30)
Case ListItemType.Header
'Inget
Case ListItemType.Footer
'Inget
End Select
</code>
vilket funkade finfint. Men då uppstod nästa problem. Om jag försöker göra samma i en webcontrol funkar det inte. Den går aldrig in i subben. Lyfter därför detta till ett nytt inlägg.