2016-04-25 9 views
1

私は、sqldatasourceを使って、ストアドプロシージャを呼び出すgridviewユーザコントロールを作成しました。ユーザーコントロールは、aspxページで動的に作成され、私はすべてのパラメータを渡すことなく動作している。私はどのようにユーザーコントロールのパラメータを渡すかわからない。ここに最小限のバージョンのコードがあります。動的に作成されたユーザコントロールにsqlパラメータを渡します。C#

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Survey.ascx.cs" Inherits="AppSurvey" %> 
    <asp:GridView ID="GridView1" runat="server"> 
     <Columns> 
      <asp:TemplateField HeaderText="Count" HeaderStyle-HorizontalAlign="center" ItemStyle-HorizontalAlign="center"> 
       <ItemTemplate> 
        <asp:TextBox ID="txtAnswerCount" runat="server" Columns="5" MaxLength="5" /> 
        <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ValidationExpression="^\d+$" 
         Display="None" SetFocusOnError="true" ControlToValidate="txtAnswerCount" ErrorMessage = "Count values must be entered as integer values." /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" CancelSelectOnNullParameter="false" ConnectionString="<%$ ConnectionStrings:1316 %>" SelectCommand="dbo.usp_Survey" SelectCommandType="StoredProcedure"> 
     <SelectParameters> 
      <asp:Parameter Name="Category" Type="String" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.SqlClient; 
using System.Threading; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Configuration; 

namespace EUCNET01316 
{ 
    public partial class Survey : System.Web.UI.UserControl 
    { 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      SqlDataSource1.SelectParameters["Category"].DefaultValue = ?????; 
      GridView1.DataSourceID = "SqlDataSource1"; 
      GridView1.DataBind(); 
     } 
    } 
} 


**** ASPX Page 

protected void Page_Load(object sender, EventArgs e) 
{ 
    UserControl ctl = Page.LoadControl("Survey.ascx") as UserControl; 
    Panel PB = new Panel(); 
    PB.Controls.Add(ctl); 
} 

答えて

3

これを行うための方法はたくさんありますが、これはユーザーコントロールの分離コードでは、あなたのパラメータや、あなたのSQLパラメータに割り当てる値を受け入れるようにパブリックプロパティを作成することができます...一つです:あなたのASPXページのマークアップで続い

namespace EUCNET01316 
{ 
    public partial class Survey : System.Web.UI.UserControl 
    { 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      SqlDataSource1.SelectParameters["Category"].DefaultValue = MyParameterValue; 
      GridView1.DataSourceID = "SqlDataSource1"; 
      GridView1.DataBind(); 
     } 

     public string MyParameterValue {get;set;} 
    } 
} 

、ユーザーコントロールに参照するためのディレクティブを追加します。

<%@ Reference Control="~/Usercontrols/Survey.ascx" %> 

が続いて分離コードでは、そのタイプの代わりにジュースとしてユーザーコントロールをキャストt "UserControl"

Survey ctl = Page.LoadControl("Survey.ascx") as Survey; 
// set the property 
ctl.MyParameterValue = "foo"; 

コードビハインドでは、ユーザーコントロールで作成したプロパティを設定できます。コントロールをページのコントロールコレクションにロードしようとする前にプロパティを設定するようにしてください(ライフサイクルが "キャッチアップ"しようとすると、プロパティの設定前にコントロールのpage_loadが起動します)。

+0

申し訳ありませんが、これは間違った質問をしますが、私が使用しようとした最初のユーザーコントロールです。「ユーザーコントロールで作成したプロパティを設定する」という意味はわかりません。 – Mike

+0

更新例 – DVK

+0

ありがとうございました!!!!!あなたは素晴らしいです!!!!!私はこの仕事をしようと多くの時間を費やしてきました。 – Mike

関連する問題