2013-10-18 15 views
5

Okej, mam formant Gridview, którego używam do edycji rekordów w mojej bazie danych. Sparametryzowałem również zapytanie. Oto kod:Aktualizacja kwerendy wydaje się usuwać pola memo

<asp:GridView ID="GridView1" runat="server" AllowSorting="True" 
    AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" 
    DataSourceID="AccessDataSource1" 
    AutoGenerateColumns="False" DataKeyNames="ID" 
    AlternatingRowStyle-BackColor="Gray" 
    AlternatingRowStyle-CssClass="editGridFormat" RowStyle-CssClass="editGridFormat"   
    RowStyle-VerticalAlign="Top" 
    onselectedindexchanged="GridView1_SelectedIndexChanged"> 

    <Columns> 
     <asp:CommandField ShowSelectButton="True" /> 
     <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
      ReadOnly="True" SortExpression="ID" /> 
     <asp:BoundField DataField="BlogTitle" HeaderText="BlogTitle" 
      SortExpression="BlogTitle" /> 
     <asp:ImageField DataImageUrlField="Image" HeaderText="Image" 
      DataImageUrlFormatString="~/PlaceImages/{0}" ControlStyle-CssClass="editPhotoGridFormat" 
      AlternateText="Something went wrong" 
      NullDisplayText="No picture on file" /> 
     <asp:TemplateField headertext="PicText"> 
      <EditItemTemplate> 
       <asp:TextBox id="PicTextBox" runat="server" text='<%# Eval("PicText")%>' textmode="MultiLine" height="300px" width="300px" /> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <%# Eval("PicText")%> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:BoundField DataField="TravelDate" HeaderText="TravelDate" SortExpression="TravelDate" /> 
     <asp:TemplateField headertext="BeginText"> 
      <EditItemTemplate> 
       <asp:TextBox id="BeginTextBox" runat="server" text='<%# Eval("BeginText")%>' textmode="MultiLine" height="300px" width="300px" /> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <%# Eval("BeginText")%> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="Caption" HeaderText="Caption" /> 
     <asp:BoundField DataField="City" HeaderText="City" /> 
     <asp:BoundField DataField="Country" HeaderText="Country" 
      SortExpression="Country" /> 
     <asp:TemplateField headertext="EndText"> 
      <EditItemTemplate> 
       <asp:TextBox id="EndTextBox" runat="server" text='<%# Eval("EndText")%>' textmode="MultiLine" height="300px" width="300px" /> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <%# Eval("EndText")%> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 

</asp:GridView> 

<asp:AccessDataSource ID="AccessDataSource1" runat="server" 
    DataFile="~/App_Data/TravelJoansDB.mdb" 
    SelectCommand="SELECT * FROM [Table2]" 
    DeleteCommand="DELETE FROM Table2 WHERE [ID] = ?" 
    UpdateCommand="UPDATE Table2 SET [BlogTitle] = ?, 
            [Image] = ?, 
            [PicText] = ?, 
            [TravelDate] = ?, 
            [BeginText] = ?, 
            [Caption] = ?, 
            [City] = ?, 
            [Country] = ?, 
            [EndText] = ? 
            WHERE [ID] = ? " > 

    <DeleteParameters> 
     <asp:Parameter Name="ID" Type="Int32" /> 
    </DeleteParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="BlogTitle" Type="String" /> 
     <asp:Parameter Name="Image" Type="String" /> 
     <asp:Parameter Name="PicText" Type="String" /> 
     <asp:Parameter Name="TravelDate" DbType="Date" /> 
     <asp:Parameter Name="BeginText" Type="String" /> 
     <asp:Parameter Name="Caption" Type="String" /> 
     <asp:Parameter Name="City" Type="String" /> 
     <asp:Parameter Name="Country" Type="String" /> 
     <asp:Parameter Name="EndText" Type="String" /> 
    </UpdateParameters> 
</asp:AccessDataSource> 

Nie wiem, czy ma to związek ze sterowaniem TemplateField, czy typem parametru będącym ciągiem znaków. Powodem, dla którego wspominam o właściwości Type jest to, że w mojej bazie danych Access są one typu memo, ale jedyne co mogę zobaczyć, to jest w połowie porównywalne, jest typ string. Założę się, że typ łańcucha nie jest wystarczająco duży, aby pomieścić pole memo, ale nie wiem, co jeszcze może się dziać. Każda pomoc będzie bardzo ceniona.

+0

Ponadto, nawet jeśli nie będę edytować tych konkretnych pól, nadal będą usuwane, wszystkie z nich. – Joseph

+1

Jest mało prawdopodobne, aby notatka mogła być większa niż ciąg znaków. Prawdopodobnie zabraknie pamięci przed osiągnięciem limitu ciągów znaków. Co się stanie, jeśli usuniesz polecenie Usuń? – codemonkeh

+0

Och, myślałem, że ciągi były ograniczone do 255 znaków ... Pozwól mi sprawdzić. – Joseph

Odpowiedz

6

Nic nie jest nie tak z polem memo. Jest to edititemtemplatefields, nie wiążisz danych. Zmień Eval do Bind na przykład zmienić:

<EditItemTemplate> 
    <asp:TextBox id="PicTextBox" runat="server" text='<%# Eval("PicText")%>' textmode="MultiLine" height="300px" width="300px" /> 
</EditItemTemplate> 

do tego:

<EditItemTemplate> 
    <asp:TextBox id="PicTextBox" runat="server" text='<%# Bind("PicText")%>' textmode="MultiLine" height="300px" width="300px" /> 
</EditItemTemplate> 

to zmienić:

<EditItemTemplate> 
    <asp:TextBox id="BeginTextBox" runat="server" text='<%# Eval("BeginText")%>' textmode="MultiLine" height="300px" width="300px" /> 
</EditItemTemplate> 

do tego:

<EditItemTemplate> 
    <asp:TextBox id="BeginTextBox" runat="server" text='<%# Bind("BeginText")%>' textmode="MultiLine" height="300px" width="300px" /> 
</EditItemTemplate> 

i zmienić to:

<EditItemTemplate> 
    <asp:TextBox id="EndTextBox" runat="server" text='<%# Eval("EndText")%>' textmode="MultiLine" height="300px" width="300px" /> 
</EditItemTemplate> 

do tego:

<EditItemTemplate> 
    <asp:TextBox id="EndTextBox" runat="server" text='<%# Bind("EndText")%>' textmode="MultiLine" height="300px" width="300px" /> 
</EditItemTemplate> 

Ja testowałem go z dostępu db. Mam nadzieję, że to pomoże!

+0

Wow, to wszystko. Na początku zmieniłem również "Eval" w kontrolce ItemTemplate, ale potem dowiedziałem się, że było źle. – Joseph

Powiązane problemy