webForumDet fria alternativet

add to gridview - olika live och test

.NET

12 svar · 577 visningar · startad av Bjuris

Medlem sedan juli 2001514 inlägg
Frågan#1

Jag har ett par textboxar som andvändare kan fylla i och sedan så läggs det till i en gridview.

Funkar perfa i test, men informationen hamnar helt åt fanders fel i live. Hittar inget riktigt mönster hur informationen placeras ut.
(se bild)

Någon som kan se vad som är fel. som sagt så är det exakt samma kod live som i test.
Nedanför är hur jag populerar min gridview


protected void BtnAddFlight_Click(object sender, EventArgs e)
    {
        

        FlightInfoTO flightInfoTO = new FlightInfoTO();
        flightInfoTO.FlightInfo_Flight = txtFlight.Text.ToUpper();
        flightInfoTO.FlightInfo_Date = txtDate.Text;
        flightInfoTO.FlightInfo_Time_From = txtTimeFrom.Text;
        flightInfoTO.FlightInfo_Time_To = txtTimeTo.Text;
        flightInfoTO.FlightInfo_Origin = txtOrigin.Text.ToUpper();
        flightInfoTO.FlightInfo_Destination = txtDestination.Text.ToUpper();
        flightInfoTO.FlightInfo_Aircraft_Type = txtAircraftType.Text.ToUpper();

        lst.Add(flightInfoTO);
        
        GridViewFlights.DataSource = lst;
        GridViewFlights.DataBind();

        GridViewRow headerRow = GridViewFlights.HeaderRow;
        headerRow.Cells[0].Text = "";
        headerRow.Cells[1].Text = "Flight";
        headerRow.Cells[2].Text = "Date";
        headerRow.Cells[3].Text = "Time";
        headerRow.Cells[4].Text = "";
        headerRow.Cells[5].Text = "Origin";
        headerRow.Cells[6].Text = "Destination ";
        headerRow.Cells[7].Text = "Aircraft";
        headerRow.Cells[0].Width = 20;
        headerRow.Cells[1].Width = 80;
        headerRow.Cells[2].Width = 125;
        headerRow.Cells[3].Width = 70;
        headerRow.Cells[4].Width = 60;
        headerRow.Cells[5].Width = 60;
        headerRow.Cells[6].Width = 60;
        headerRow.Cells[7].Width = 100;

        txtFlight.Text = "";
        txtDate.Text="";
        txtTimeFrom.Text = "";
        txtTimeTo.Text = "";
        txtOrigin.Text = txtDestination.Text;
        txtDestination.Text = "";
        txtAircraftType.Text = "";

        btnClearFlight.Visible = true;
    }

aspx filen

<table>
                    <tr>
                        <td>Flight</td>
                        <td>Date</td>
                        <td>Time</td>
                        <td></td>
                        <td></td>
                        <td>From</td>
                        <td>To</td>
                        <td>Aircraft Type</td>
                    </tr>
                    <tr>
                        <td><asp:textbox TabIndex="5" id="txtFlight" runat="server" CssClass="Mandatory" Width="60" MaxLength="7"/>
                                                   </td>
                        <td><asp:textbox TabIndex="6" id="txtDate" runat="server" CssClass="Mandatory"  Width="70" MaxLength="5"/>
                            <asp:Image ID="imgCalendar1" runat="server" ImageUrl="images/calendar.gif"/>
						    <ajaxToolkit:CalendarExtender ID="CalendarExtender1" runat="server" TargetControlID="txtDate" Animated="true"  Format="ddMMM" PopupButtonID="imgCalendar1">
                            </ajaxToolkit:CalendarExtender>	
                                                   </td>
                        <td><asp:textbox TabIndex="7" id="txtTimeFrom" runat="server" CssClass="Optional" MaxLength="4" Width="40"/>
                        </td>
                        <td>To</td>
                        <td><asp:textbox TabIndex="8" id="txtTimeTo" runat="server" CssClass="Optional" MaxLength="4" Width="40"/></td>
                        <td><asp:textbox TabIndex="9" id="txtOrigin" runat="server" CssClass="Mandatory" MaxLength="3" Width="30"/>
                         </td>
                        <td><asp:textbox TabIndex="10" id="txtDestination" runat="server" CssClass="Mandatory" MaxLength="3" Width="30"/>
                        </td>
                        <td><asp:textbox TabIndex="11" id="txtAircraftType" runat="server" CssClass="Optional" MaxLength="10" Width="80"/></td>
                            <ajaxToolkit:MaskedEditExtender ID="MaskedEditExtender3" runat="server"
                                                    TargetControlID="txtTimeFrom"
                                                    Mask="99:99"
                                                    MessageValidatorTip="true"
                                                    OnFocusCssClass="MaskedEditFocus"
                                                    OnInvalidCssClass="MaskedEditError"
                                                    MaskType="Time"
                                                    InputDirection="RightToLeft"
                                                    AcceptNegative="Left"
                                                    />
                                                <ajaxToolkit:MaskedEditExtender ID="MaskedEditExtender4" runat="server"
                                                    TargetControlID="txtTimeTo"
                                                    MessageValidatorTip="true"
                                                    OnFocusCssClass="MaskedEditFocus"
                                                    OnInvalidCssClass="MaskedEditError"
                                                    MaskType="Time"
                                                    InputDirection="RightToLeft"
                                                    AcceptNegative="Left"
                                                    ClearMaskOnLostFocus ="true"
                                                    Mask="99:99" 
                                                    />    
                        <td rowspan="4" valign="top">
                            
                            <asp:Button ID="BtnAddFlight" runat="server" Text="Add" 
                                onclick="BtnAddFlight_Click"  ValidationGroup="validationGroup"  CssClass="BUTTON"  TabIndex="12"/>
                            <asp:Button ID="btnClearFlight" runat="server" Text="Clear List" 
                                CausesValidation="false" onclick="BtnClearFlight_Click"  CssClass="BUTTON" Visible=false />    
                        </td>                                
                    </tr>
                    <tr>
                        <td colspan="8">
                            <asp:ValidationSummary ID="ValidationSummary1" runat="server"  ValidationGroup="validationGroup"/>
                        </td>
                    </tr>
                    <tr>
                        <td colspan="2">
                            <asp:UpdateProgress DynamicLayout="true" DisplayAfter="0" runat="server" ID="updateProgress1" AssociatedUpdatePanelID="up1">
                                <ProgressTemplate>
	                                <asp:Image runat="server" ID="imgUpdate3" ImageUrl="images/spinner.gif" /> Please wait... &nbsp;&nbsp;
	                            </ProgressTemplate>
	                        </asp:UpdateProgress>
                        </td>
                    </tr>
                    <tr>
                        <td colspan="8" class="Small">
                            <asp:GridView ID="GridViewFlights" 
                                runat="server" 
                                EmptyDataText="No Data"
                                SkinID="Professional2"
                                ShowHeader="true"
                                OnDataBound=GridViewFlights_OnDataBound 
                                OnRowCommand="GridViewFlights_RowCommand"
                                EnableViewState="true"
                                width="500"
                                >
                                <Columns>
                                    <asp:ButtonField Text="Delete" ButtonType="Image" ImageUrl="~/Images/delete_small.png" CommandName="deleteRow"/>
                                </Columns>
                            </asp:GridView>
                            
                            </td>
                    </tr>
                </table>
FlightList.jpg
Medlem sedan maj 20012 812 inlägg
#2

Hade jag varit som du så hade jag tagit fram htmlSourcen för båda siterna och jämfört dem mot varandra, så hade du säkert sett vart felet ligger och att det INTE är samma kodbas som körs på din utvecklingsmaskin som din produktionsmaskin.

Det verkar nämligen helt orimligt att samma kod skulle generera olika utseende (om det inte är olika läsare förstås :)). Men som sagt ta fram HTML-sourcen och titta på den, så ser du vad de finns för skillnader.

- M

Medlem sedan juli 2001514 inlägg
#3

testmaskin och server kör samma .net och exakt samma kod som ligger på serven (copy paste) samt att båda maskinerna har omstartad webbserver.
Jäkligt svårt att jämföra den genererade koden då gridviewen inte kommer med om man plockar view source från ie.

Medlem sedan jan. 20022 440 inlägg
#4

Bjuris skrev:

testmaskin och server kör samma .net och exakt samma kod som ligger på serven (copy paste) samt att båda maskinerna har omstartad webbserver.
Jäkligt svårt att jämföra den genererade koden då gridviewen inte kommer med om man plockar view source från ie.

Nu tänkte du nog fel ;) den genererade html koden för din gridview kan du väl komma åt från både webservern och din produktionsserver?

Det är ju bara att högerklicka i webläsarfönstret och välja källa.

Precis som Gladh skriver lär det ju vara ett CSS problem inte problem med din gridview.

Medlem sedan juli 2001514 inlägg
#5

När jag kör en view source så ser jag inte informationen som ligger i gridviewen (jag antar att det har att göra med att den ligger i en updatepanel)

dvs när jag klickar på add kanppen så laddas inte hela sidan om utan bara själva updatepaneln --> view source uppdateras inte.

Medlem sedan feb. 2005280 inlägg
#6

Är lite nyfiken på vad som händer här

OnDataBound=GridViewFlights_OnDataBound

Är det klarlagt vilka kolumner som ska ha vilket värde?
lst = vad är det?

Jag tänkte (obs långskott) bara om servern hade annan Culture tex så kanske kolumnerna binds i annan ordning....

Jag hade testat att skapa egna Bound Columns och knutit dem till respektive lst.fält

Medlem sedan maj 20012 812 inlägg
#7

Bjuris skrev:

När jag kör en view source så ser jag inte informationen som ligger i gridviewen (jag antar att det har att göra med att den ligger i en updatepanel)

ahh... Ajax.. sådan nymodernigheter...

Jag skulle tippa på att frequz är inne på rätt spår här, eftersom du inte själv har skapat dina kolumner i din gridview så har du faktiskt ingen kontroll på i vilken ordning som de kommer att bindas. Gör som frequz föreslår och skapa egna BoundColumns så kommer ditt problem att försvinna.

- M

Medlem sedan jan. 20022 440 inlägg
#8

använder du AutoGenerateColumns? Jag har inte så bra erfarenheter av det...

Medlem sedan juli 2001514 inlägg
#9

D
lst =
List<FlightInfoTO> lst = new List<FlightInfoTO>();

FlightInfoTO:

string strFlightInfo_Flight;
    string strFlightInfo_Date;
    string strFlightInfo_Time_From;
    string strFlightInfo_Time_To;
    string strFlightInfo_Origin;
    string strFlightInfo_Destination;
    string strFlightInfo_Aircraft_Type;

listan binds alltså lika varje gång.

första fältet [0] i gw innehåller deleteknappen.

i web.config

<globalization
        requestEncoding="utf-8"
        responseEncoding="utf-8"
        culture="sv-SE"
   		/>

Skulle helst vilja slippa bound colums då jag vill att den skall vara så generell som möjligt.

Medlem sedan maj 20012 812 inlägg
#10

bjuris skrev:

Skulle helst vilja slippa bound colums då jag vill att den skall vara så generell som möjligt.

Det finns det ju knappast någon anledning till, om du vill ändra något, typ ändra ordningen på kolumnener så måste du ändå in och ändra i din kod, dels i själv header som skriver ut kolumnerna och dels i objektet så att du ändrar i propertiesen.

- M

Medlem sedan juli 2001514 inlägg
#11

Jo men det blir två filer istället för tre...

Medlem sedan jan. 20022 440 inlägg
#12

Jag menar absolut inte att vara dryg eller otrevlig för du kan säkert .net bättre än mig men har du verkligen läst på om gridviewn ordentligt?

Jag tycker att att det är lättare, snabbare, ger bättre kontroll SAMT större möjligheter att göra ändringar smidigt när jag använder av boundcolumns eller TemplateFields. När den som kollar på UI'n, du i det här fallet ser på din gridview så har du ju ingen aning om vad som finns i den eftersom det styrs i codebehind?

Om du använder dig av en skiktad asp.net lösning så vet du ju vikten av att tydligt definiera dina klasser, entiteter och affärslager. Varför gör du då inte det i UI'n också?

Dessutom så dyker det upp sådana här problem ibland som blir väldigt svåra att lösa om man inte "ser" var problemet finns :stud

Medlem sedan maj 20012 812 inlägg
#13

bjuris skrev:

Jo men det blir två filer istället för tre...

Nu hänger jag inte med riktigt, du behöver inte ändra antalet filer bara för att du lägger till några bounded columns, du lägger ju dessa innanför dina asp:GridView taggar, så i aspxsidan lägger du bara till de boundcolumns dom du vill. Det är allt. Du beskriver givetviss från vilket fält som de skall hämta data, men du behöver inte lägga till någon fil för det...

- M

267 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)