0

私はこの時点でかなり迷っています(しばらく取り組んでおらず、壁/締め切りに直面しています)が、スローされているエラーメッセージは、データベース内のフィールドを更新するために btnupdate を押した後です。

完全なエラー メッセージ:

Could not find control 'txtTitle' in ControlParameter 'Title'.

ページ:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>

<div class="floater">
<h3>Books</h3>
<asp:DropDownList
    id="DropDownList_Books"
    DataSourceId="srcBooks"
    DataTextField="Title"
    DataValueField="Id"
    Runat="server" />
    <asp:Button ID="btnSelect" runat="server" Text="View Detials" Width="106px" 
        onclick="btnSelect_Click" />
</div>

<asp:GridView
    id="grdBooks"
    DataSourceID="srcBooks_Description"
    Runat="server" Visible="False" />

    <asp:Button ID="btnEdit" runat="server" onclick="btnEdit_Click" Text="Edit" />

</div>

<asp:Button ID="btnCancel" runat="server" onclick="btnCancel_Click"
    Text="Cancel" Visible="False" />

<asp:FormView
    id="frmEditBook"
    DataKeyNames="Cat_Id"
    DataSourceId="srcBooks_Description"
    DefaultMode="Edit"
    Runat="server" Visible="False" 

    style="z-index: 1; left: 391px; top: 87px; position: absolute; height: 111px; width: 206px" >
    <EditItemTemplate>
    <asp:Label
        id="lblTitle"
        Text="Title:"
        AssociatedControlID="txtTitle"
        Runat="server" />
    <asp:TextBox
        id="txtTitle"
        Text='<%#Bind("Title")%>'
        Runat="server" />
    <br />
    <asp:Label
        id="lblDescription"
        Text="Description:"
        AssociatedControlID="txtDescription"
        Runat="server" />
    <asp:TextBox
        id="txtDescription"
        Text='<%#Bind("Description")%>'
        Runat="server" />
    <br />
    <asp:Button
        id="btnUpdate"
        Text="Update"
        CommandName="Update"
        Runat="server" />
    </EditItemTemplate>
</asp:FormView>
<asp:SqlDataSource ID="srcBooks" runat="server" 
    ConnectionString="Data Source=****;;Initial Catalog=***;Persist Security Info=True;User ID=****;Password=****" 
    onselecting="srcBooks_Selecting" ProviderName="System.Data.SqlClient" SelectCommand="SELECT Title,Id FROM PARTIN_ID">

</asp:SqlDataSource>

<asp:SqlDataSource ID="srcBooks_Description" runat="server" 
    ConnectionString="Data Source=****, 14330&quot;;Initial Catalog=****;Persist Security Info=True;User ID=****;Password=****" 
    onselecting="srcBooks_Selecting" ProviderName="System.Data.SqlClient" SelectCommand="SELECT * FROM PARTIN_INFO WHERE Cat_ID=@Id" UpdateCommand="UPDATE PARTIN_INFO SET Title=@Title,
        Description=@Description WHERE Cat_Id=@Id">
<SelectParameters>
        <asp:ControlParameter
            Name="Id"
            Type="int32"                
            ControlID="DropDownList_Books"
            PropertyName="SelectedValue" />
    </SelectParameters>
     <UpdateParameters>
          <asp:ControlParameter Name="Title" ControlId="txtTitle" PropertyName="Text"/>
          <asp:ControlParameter Name="Description" ControlId="txtDescription" PropertyName="Text"/>
          <asp:ControlParameter Name="Id" ControlId="DropDownList_Books" PropertyName="SelectedValue"/>
      </UpdateParameters>

</asp:SqlDataSource>

</form>
</body>
</html>

コードビハインド:

namespace WebApplication1
{
public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void srcBooks_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {

    }

    protected void btnSelect_Click(object sender, EventArgs e)
    {
        grdBooks.Visible = true;
    }

    protected void btnCancel_Click(object sender, EventArgs e)
    {
        frmEditBook.Visible = false;
    }

    protected void btnEdit_Click(object sender, EventArgs e)
    {
        frmEditBook.Visible = true;
        btnCancel.Visible = true;
    }

    protected void btnUpdate_Click(object sender, EventArgs e)
    {
        try
        {
            srcBooks_Description.Update();
        }
        catch (Exception except)
        {
            // Handle the Exception.
        }
    }
    }
}
4

5 に答える 5

1

ご覧のとおり、問題はコンテキストです。参照されているコントロールがあるフォームビュー内に sqldatasource を配置することもできます (適切ではなく、非常に制限されていますが、機能する可能性があります)。

2 つのドロップダウンを含む詳細ビューがあり、1 つが別のドロップダウンに依存しているとします。私にとってうまくいくのは、コントロールが参照するのと同じコンテキスト (親コントロール) にデータソースを配置することです。これにより、コントロールの完全なパスを参照する必要がなくなります。

私の 2 セントは、サブフォームを使用して Access Forms でコントロールを参照する必要がある方法を非常に連想させるということです。:)

<asp:DetailsView runat="server">
    <asp:TemplateField>
        <EditTemplate>
          <asp:DropDownList id="ParentDDL" Datasource="SQLDataSource1">

          </asp:DropDownList>
        </EditTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
        <EditTemplate>
          <asp:DropDownList id="ParentDDL" Datasource="SQLDatasource2">

          </asp:DropDownList>
          <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * from table where field1=@field">
                                <SelectParameters>
                                    <asp:ControlParameter ControlID="ParentDDL" Name="field" 
                                        PropertyName="SelectedValue" Type="String" />
                                </SelectParameters>          
                            </asp:SqlDataSource>
        </EditTemplate>
    </asp:TemplateField>
</asp:DetailsView>
于 2014-01-16T21:05:55.263 に答える
0

使用すべきではありませんでしたが、bindメソッドを使用<asp:ControlParameter..<asp:Parameter..たSqlDataSourceコントロールは、パラメーターの値を取得するためのコントロールを見つけるのに十分インテリジェントです。

sqlDataSourceのこの部分を次のように更新します。

  ....
 <UpdateParameters>
      <asp:Parameter Name="Title" Type="String"/>
      <asp:Parameter Name="Description" Type="String"/>
      <asp:Parameter Name="Id" Type="Int32"/>
  </UpdateParameters>
 .....

Type属性に注意し、関連するタイプを指定してください。

(問題は、SqlDataSourceコントロールがデータバインドされたコントロールで定義されたコントロールに明示的にアクセスできないことです)

于 2012-02-12T19:02:42.050 に答える
0

完全な名前でコントロールを参照する必要があります。

ブラウザーでページを開くと、コントロールの完全な名前を簡単に見つけることができます。ソースを表示するだけで表示されます。

于 2012-02-12T16:22:33.490 に答える
0

問題は、それtxtTitleが FormView 内にあるため、SqlDataSource で実行しようとしている方法ではアクセスできないことです。IDで直接アクセスすることはできません。

FormView と SqlDataSource を操作するのに役立つ MSDN の記事があります

于 2012-02-12T16:22:55.970 に答える