Как привязать ретранслятор к хранимой процедуре? - PullRequest
0 голосов
/ 12 ноября 2011

Я пытаюсь связать данные с моим ретранслятором, но пока безуспешно.Кто-нибудь думает, что может показать мне, где я иду не так?На данный момент у меня есть две функции, следуя некоторым учебникам / примерам, но я надеялся, что у меня будет только одна ... возможно, это невозможно.Спасибо!

HTML:

                <ItemTemplate>
                        <tr class="row">
                            <td><asp:Label ID="TitleLabel" runat="server" Text=""></asp:Label></td>
                            <td><asp:Label ID="NameLabel" runat="server" Text=""></asp:Label></td>
                            <td><asp:Label ID="PhoneLabel" runat="server" Text=""></asp:Label></td>
                            <td><asp:Label ID="EmailLabel" runat="server" Text=""></asp:Label></td>
                        </tr>
                </ItemTemplate>

VB

Protected Sub BindData()

    Dim oCommand As SqlCommand
    Dim oReader As SqlDataReader

    Try
        oCommand = DataAccess.GetSQLCommand("People_Retrieve", CommandType.StoredProcedure, SourceServer.ConnectionLocal)
        oCommand.Connection.ChangeDatabase("MyDatabase")

        oCommand.CommandTimeout() = 9000
        oReader = oCommand.ExecuteReader()

        PeopleRepeater.DataSource = oReader
        PeopleRepeater.DataBind()

    Catch ex As Exception
        ErrorHandler.HandleError(ex)
    Finally
        oReader.Close()
        oReader = Nothing
    End Try

End Sub

Protected Sub PeopleRepeater_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles PeopleRepeater.ItemDataBound

    Dim NameLabel As Label = CType(e.Item.FindControl("LabelName"), Label)
    NameLabel.Text = e.Item.DataItem("Name")

    Dim TitleLabel As Label = CType(e.Item.FindControl("TitleName"), Label)
    NameLabel.Text = e.Item.DataItem("Title")

    Dim PhoneLabel As Label = CType(e.Item.FindControl("PhoneName"), Label)
    NameLabel.Text = e.Item.DataItem("Phone")

    Dim EmailLabel As Label = CType(e.Item.FindControl("EmailName"), Label)
    NameLabel.Text = e.Item.DataItem("Email")

End Sub

Ответы [ 2 ]

1 голос
/ 12 ноября 2011

Следуйте инструкциям

  1. Создать хранимую процедуру с именем 'SelectPersonalDetails'

    СОЗДАНИЕ ПРОЦЕДУРЫ SelectPersonalDetails

    - Добавить параметры для хранимой процедуры здесь

    @ Email SYSNAME

    AS
    
    BEGIN
    

    - добавлено SET NOCOUNT ON для предотвращения - вмешательство в операторы SELECT.

    SET NOCOUNT ON;

    - Вставьте операторы для процедуры здесь

    НАЧАТЬ НАЧАЛО СДЕЛКИ

    НАЧАТЬ

    ВЫБРАТЬ Имя, Должность, Телефон, Электронная почта ОТ ЛИЧНЫХ ДЕТАЛЕЙ

    WHERE Email = @ Email

    END

    совершение транзакции

    END TRY

    НАЧАТЬ ЛОВУШКУ

    ROLLBACK TRANSACTION
    DECLARE @ERR AS VARCHAR(500)
    SELECT @ERR = ERROR_MESSAGE()   
    RAISERROR(@ERR,16,1)
    
    RETURN
    

    END CATCH END

  2. Создайте набор данных для привязки данных в повторителе.

    public DataSet Get_PersonaldetailbasedEmail () {

        try
        {
            DataSet oDS = new DataSet();
            SqlParameter[] oParam = new SqlParameter[1];
    
            oParam[0] = new SqlParameter("@Email", _sEmail);
    
    
            oDS = SqlHelper.ExecuteDataset(DataConnectionString,          CommandType.StoredProcedure, "SelectPersonalDetails", oParam);
            return oDS;
        }
        catch (Exception e)
        {
            ErrorMessage = e.Message;
            return null;
        }
    }
    

Примечание: (i) SelectPersonalDetails - это имя хранимой процедуры

  (ii) In order to select unique record from the table i have used emailid 

  (iii) I have assume the table name as PersonalDetails.
  1. Создайте страницу управления пользователем, например, Personeldetails.ascx

    / Li> / Li> / Li> / Li>

Обратите внимание, что у меня есть HTML-код для повторителя, но я не знаю, как работать в этом редакторе. В любом случае идентификатор повторителя такой же, как у вашего повторителя, а идентификаторы меток такие же, как и у вашего метки.

  1. DataBind

    Создать функцию для привязки данных

    public void FillArray (ArrayList alist) { ArrayList al = new ArrayList ();

        foreach (Object objRow in alist)
        {
            string sTitle = ((DataRow)objRow)["Title"].ToString();
            string sName = ((DataRow)objRow)["Name"].ToString();
            string sPhone = ((DataRow)objRow)["Phone"].ToString();
           string sMail = ((DataRow)objRow)["Mail"].ToString();        
    
            al.Add(new string[]{ sTitle,sName,sPhone,sMail});
    
    
        }
        PeopleRepeater.DataSource = al;
        PeopleRepeater.DataBind();
    
    
    }
    
  2. Теперь вызывается как элемент данных с привязкой

    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { string [] itemArray = ((string []) e.Item.DataItem);

            Label myTitle = (Lable)e.Item.FindControl("TitleLabel");
            Label myName = (Label)e.Item.FindControl("NameLabel");
            Label myPhone = (Label)e.Item.FindControl("PhoneLabel");
            Label myEmail = (Label)e.Item.FindControl("EmailLabel");
    
            myTitle.Text = itemArray[0];
            myName.Text = itemArray[1];
            myPhone.Text = itemArray[2];
            myEmail.Text = itemArray[3];
    
    
    
    
        }
    

Если вы найдете ответ полезным, отметьте его как свой ответ, иначе дайте мне знать ...

1 голос
/ 12 ноября 2011

Используйте SqlDataAdapter:

Using adap As New SqlDataAdapter(oCommand)
    Dim table As New DataTable()
    adap.Fill(table)

    PeopleRepeater.DataSource = table
    PeopleRepeater.DataBind()
End Using

Я не вижу, где вы открываете соединение, поэтому вам, возможно, потребуется добавить это:

oCommand.Connection.Open()
...