привязка objectDataSource с автоматическим добавлением параметров сетки просмотра ASP.NET - PullRequest
1 голос
/ 16 февраля 2010

У меня есть привязка данных сетки к объектному источнику данных. Все работало отлично, пока я не изменил 2 столбца с asp: BoundField на asp: TemplateField. Это столбец UPC и столбец детали. Я хотел показать кнопку ссылки для каждого из этих полей, которые переносят пользователя на другую страницу. Теперь asp.net ожидает, что эти два поля будут параметрами в процедуре хранилища обновлений. Почему это? Как получить, чтобы не предполагать, что эти столбцы должны быть переданы в процедуру хранения?

Вот код для вида сетки:

          <asp:GridView ID="GridView1" runat="server" SkinID="MSDefault" AutoGenerateColumns="False" DataSourceID="CartDataSource" PageSize="25"
              Width="100%" DataKeyNames="CartId" EmptyDataText="The cart is empty" OnRowDataBound="GridView1_RowDataBound" onrowcommand="GridView1_RowCommand">
              <Columns>
                  <asp:CommandField ShowDeleteButton="True" ShowEditButton="True">
                      <ItemStyle Width="8%" />
                  </asp:CommandField>
                  <asp:BoundField DataField="CartId" HeaderText="CartId" InsertVisible="False" ReadOnly="True"
                      SortExpression="CartId" Visible="False" />
                  <asp:TemplateField HeaderText="UPC" SortExpression="UPC">
                      <ItemTemplate>
                          <asp:LinkButton ID="LinkButton1" runat="server" CommandName="ShowInfo" CommandArgument='<%# Bind("UPC") %>' Text='<%# Bind("UPC") %>'></asp:LinkButton>
                      </ItemTemplate>
                      <ItemStyle Width="9%" />
                  </asp:TemplateField>
                  <asp:BoundField DataField="Mfr" HeaderText="Mfr" ReadOnly="True" SortExpression="Mfr">
                      <ItemStyle Width="11%" />
                  </asp:BoundField>
                  <asp:TemplateField HeaderText="Part" SortExpression="Part">
                      <ItemTemplate>
                          <asp:LinkButton ID="LinkButton2" runat="server" CommandName="ShowInfo" CommandArgument='<%# Bind("UPC") %>' Text='<%# Bind("Part") %>'></asp:LinkButton>
                      </ItemTemplate>
                      <ItemStyle Width="10%" />
                  </asp:TemplateField>
                  <asp:BoundField DataField="CustPart" HeaderText="Cust Part" ReadOnly="True" SortExpression="CustPart">
                      <ItemStyle Width="10%" />
                  </asp:BoundField>
                  <asp:BoundField DataField="PartDesc" HeaderText="Description" ReadOnly="True" SortExpression="PartDesc">
                      <ItemStyle Width="30%" Wrap="True" />
                  </asp:BoundField>
                  <asp:TemplateField HeaderText="Marked" SortExpression="Marked">
                      <EditItemTemplate>
                          <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Marked") %>' />
                      </EditItemTemplate>
                      <ItemTemplate>
                          <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Marked") %>' Enabled="false" />
                      </ItemTemplate>
                      <ItemStyle Width="2%" />
                  </asp:TemplateField>
                  <asp:BoundField DataField="Quantity" DataFormatString="{0:d}" HeaderText="Quantity"
                      SortExpression="Quantity">
                      <ItemStyle HorizontalAlign="Right" Width="4%" />
                  </asp:BoundField>
                  <asp:TemplateField HeaderText="Price" SortExpression="Price">
                      <ItemStyle HorizontalAlign="Right" Width="8%" />
                      <ItemTemplate>
                          <asp:Label ID="lblPrice" runat="server"></asp:Label>
                          <asp:LinkButton ID="LnkBtnCallLocalBranch" runat="server" Visible="false" PostBackUrl="~/UserProfile/LocalDistributors.aspx">call local branch</asp:LinkButton>
                      </ItemTemplate>
                  </asp:TemplateField>
                  <asp:TemplateField HeaderText="Ext Price" SortExpression="ExtPrice">
                      <ItemStyle HorizontalAlign="Right" Width="8%" />
                      <ItemTemplate>
                          <asp:Label ID="lblExtPrice" runat="server"></asp:Label>
                      </ItemTemplate>
                  </asp:TemplateField>
              </Columns>
          </asp:GridView>

Вот код объекта DataSource

<asp:ObjectDataSource ID="CartDataSource" runat="server" OldValuesParameterFormatString="{0}" DeleteMethod="DeleteWithKey" SelectMethod="GetDataByCUserId"
    TypeName="PunchoutData.CartDataSetTableAdapters.CartTableAdapter" UpdateMethod="UpdateQuantityAndMarked" OnUpdated="CartDataSource_Updated" OnObjectCreated="CartDataSource_ObjectCreated">
    <DeleteParameters>
        <asp:Parameter Name="cartid" Type="Int32" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:Parameter Name="marked" Type="Boolean" />
        <asp:Parameter Name="quantity" Type="Int32" />
        <asp:Parameter Name="cartid" Type="Int32" />
    </UpdateParameters>
    <SelectParameters>
        <asp:SessionParameter Name="cuserid" SessionField="CUserId" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

Вот ошибка, которая генерируется

ObjectDataSource «CartDataSource» не удалось найти неуниверсальный метод «UpdateQuantityAndMarked», который имеет параметры: помеченный, количество, CartId, UPC, деталь.

1 Ответ

2 голосов
/ 16 февраля 2010

Проблема заключалась в том, что я использовал <% # Bind ("UPC")%> и мне следовало использовать <% # Eval ("UPC")%>. Привязка двухсторонняя, а Eval односторонняя (только для чтения)

...