6

CKEditorを詳細ビューと統合しようとしています。私のサンプルコードは次のとおりです。

<asp:DetailsView ID="DetailsViewStation" runat="server" Height="50px" AutoGenerateRows="False"
                    DataKeyNames="StationNo" DataSourceID="StationSqlDataSource" CellPadding="4"
                    ForeColor="#333333" GridLines="None">
                    <AlternatingRowStyle BackColor="White" />
                    <CommandRowStyle BackColor="#FFFFC0" Font-Bold="True" />
                    <FieldHeaderStyle BackColor="#FFFF99" Font-Bold="True" />
                    <Fields>
                        <asp:BoundField DataField="StationNo" HeaderText="Station Number" ReadOnly="True"
                            SortExpression="StationNo" ApplyFormatInEditMode="True">
                            <HeaderStyle Width="150px" />
                            <ItemStyle HorizontalAlign="Center" Width="1200px" />
                        </asp:BoundField>
                        <asp:BoundField DataField="Station_Name" HeaderText="Station Name" SortExpression="Station_Name">
                            <ItemStyle HorizontalAlign="Center" />
                        </asp:BoundField>
                    </Fields>
                    <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                    <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                    <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
                    <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
                </asp:DetailsView>
                <asp:SqlDataSource ID="StationSqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:AgainConnectionString %>"
                    DeleteCommand="DELETE FROM [StationInfoTable] WHERE [StationNo] = @StationNo"
                    InsertCommand="INSERT INTO [StationInfoTable] ([StationNo], [Station_Name] VALUES (@StationNo, @Station_Name)"
                    SelectCommand="SELECT * FROM [StationInfoTable] WHERE ([StationNo] = @StationNo)"
                    UpdateCommand="UPDATE [StationInfoTable] SET [Station_Name] = @Station_Name, [Importatnat_Info] = @Importatnat_Info WHERE [StationNo] = @StationNo">
                    <DeleteParameters>
                        <asp:Parameter Name="StationNo" Type="Int32" />
                    </DeleteParameters>
                    <InsertParameters>
                        <asp:Parameter Name="StationNo" Type="Int32" />
                        <asp:Parameter Name="Station_Name" Type="String" />
                    </InsertParameters>
                    <SelectParameters>
                        <asp:ControlParameter ControlID="ListBoxChoices" Name="StationNo" PropertyName="SelectedValue"
                            Type="Int32" />
                    </SelectParameters>
                    <UpdateParameters>
                        <asp:Parameter Name="Station_Name" Type="String" />
                        <asp:Parameter Name="StationNo" Type="Int32" />
                    </UpdateParameters>
                </asp:SqlDataSource>

CKEditorで詳細ビューのデータを編集して、データベースへのリンクとデータベースからのリンクを挿入および削除したいと思います。誰かが前にそれをしましたか?

4

3 に答える 3

5

私はDetailsView専門家ではありませんが、次の一般的な要約はあなたがする必要があることをカバーしていると思います。

Station_NameにTemplateFieldはではなくを使用します。BoundFieldこれは次のようになります。

 <asp:TemplateField HeaderText="Station Name">
     <ItemTemplate>
          <asp:Label ID="lblStationName" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Station_Name") %>'></asp:Label>
     </ItemTemplate>
     <EditItemTemplate>
          <CKEditor:CKEditorControl ID="CKEditor1" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Station_Name") %>' />
     </EditItemTemplate>
</asp:TemplateField>

これは、からデータベースを更新する際の適切なリンクのように見えますDetailsView。あなたの状況が彼と異なるところは、あなたが使用しているということですCKEditorCKEditorただし、更新の準備ができたら、彼と同じ方法でコントロールから情報を取得できます。

Dim htmlText as String = Nothing
Dim ctl as CKEditor =  CType(DetailsViewStation.FindControl("CKEditor1"), CKEditor)
If ctl Is Nothing Then
    htmlText = ctl.Text
End If

コントロールのTextプロパティにバインドできないことが判明した場合はCKEditor、値をに割り当てますCKEditorTextコントロールを取得するのと同じ方法でDetailsViewStation.FindControl("CKEditor1")コントロールします。コントロールを取得するためにを実行し、データベースから取得したHTMLをコントロールのTextプロパティに割り当てます。

これがお役に立てば幸いです。

于 2012-12-26T20:32:07.803 に答える
4

作成したコメントに基づいて、Textbox/CKEditorから値を取得することはありません。

のため、バインディングは読み取り専用DataBinder.Evalです。

試す

         <asp:TemplateField HeaderText="Station Name">
                        <ItemTemplate>
                            <asp:Label ID="lblStation_Name" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Station_Name") %>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <CKEditor:CKEditorControl ID="CKEditor1" runat="server" Text='<%# Bind("Station_Name") %>' />
                        </EditItemTemplate>
                    </asp:TemplateField>

また

          <asp:TemplateField HeaderText="Station Name">
                        <ItemTemplate>
                            <asp:Label ID="lblStation_Name" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Station_Name") %>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <CKEditor:CKEditorControl ID="CKEditor1" runat="server" Text='<%# DataBinder.Bind(Container, "DataItem.Station_Name") %>' />
                        </EditItemTemplate>
                    </asp:TemplateField>

編集:あなたのコメントに基づいて:どのようにSQLDataSourceを生成しましたか?デザイナーを使用するのが最善です。自分でコードを生成しようとしたと思います。複数のエラーが表示されます:

UpdateParametersでControlParametersを使用していますが、値がすべて間違っています。ControlIDに割り当てた値は、PropertyNameに割り当てる必要があります。次に、対応するCKEditorの名前をControlIDに割り当てます。

このような:

 <asp:ControlParameter ControlID="CKEditor12" PropertyName="Footer_notes" Type="String" />
于 2013-01-02T14:19:20.797 に答える
2

次のコードは、CKEditorをDetailsViewと統合した後のものであり、他の人が読んでその恩恵を受けることができるように、ここに答えを示します。データベースにハイパーリンクを挿入できるようにするためにCKEditorを使用したかったNotesフィールドを除いて、すべて同じです。

 <asp:TemplateField HeaderText="Notes">
                            <ItemTemplate>
                                <asp:Label ID="lblStationNotes" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Notes") %>'></asp:Label>
                            </ItemTemplate>
                            <EditItemTemplate>
                                <CKEditor:CKEditorControl ID="CKEditor11" runat="server" Text='<%# Bind("Notes") %>' />
                            </EditItemTemplate>
                        </asp:TemplateField>
于 2013-01-07T16:10:40.390 に答える