Динамически создать компонент.
От: Apetrenko  
Дата: 10.06.04 05:55
Оценка:
Ситуация такая.

Есть DataGrid, в определенные ячейки нужно кинуть link и на клик на любой из link(URLLabel)
вызвать функцию C# с определенным параметром.


Как заполнить ручками определенные ячейки DataGrid я знаю.
А вот как создать урл и повесить на него функцию С# не знаю. Где копать?


Спасибо.
Re: Динамически создать компонент.
От: rus blood Россия  
Дата: 10.06.04 07:01
Оценка:
Здравствуйте, Apetrenko, Вы писали:

A>Ситуация такая.


A>Есть DataGrid, в определенные ячейки нужно кинуть link и на клик на любой из link(URLLabel)

A>вызвать функцию C# с определенным параметром.


A>Как заполнить ручками определенные ячейки DataGrid я знаю.

A>А вот как создать урл и повесить на него функцию С# не знаю. Где копать?


A>Спасибо.


Можно перехватывать событие ItemCommand и вызывать свою функцию напрямую.
Имею скафандр — готов путешествовать!
Re[2]: Динамически создать компонент.
От: Apetrenko  
Дата: 10.06.04 07:16
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Здравствуйте, Apetrenko, Вы писали:


A>>Ситуация такая.


A>>Есть DataGrid, в определенные ячейки нужно кинуть link и на клик на любой из link(URLLabel)

A>>вызвать функцию C# с определенным параметром.


A>>Как заполнить ручками определенные ячейки DataGrid я знаю.

A>>А вот как создать урл и повесить на него функцию С# не знаю. Где копать?


A>>Спасибо.


RB>Можно перехватывать событие ItemCommand и вызывать свою функцию напрямую.


а можно легкий пример где нибуть посмотреть..

Спасибо
Re[3]: Динамически создать компонент.
От: rus blood Россия  
Дата: 10.06.04 08:53
Оценка:
A>а можно легкий пример где нибуть посмотреть..

Наверно это не совсем то, что тебе нужно.
У нас был контрол ascx, отображающий DataGrid.
В одной колонке были две кнопки

        <asp:TemplateColumn 
            HeaderText="......" 
            SortExpression="...."
            ....>
            
            <ItemTemplate>
            
                <asp:ImageButton
                    id=ImageButton_Status
                    runat=server 
                    ImageUrl="...."
                    Width=13 Height=13 />
                    
                <asp:LinkButton
                    ID=LinkButton_ProposalID 
                    ForeColor=#000000 
                    Runat=server 
                    Font-Name="Verdana" 
                    Font-Size="x-small">
                        <span style="vertical-align:top;">
                            <%# DataBinder.Eval(Container.DataItem, "....") %>
                        </span>
                </asp:LinkButton>
            </ItemTemplate>
            
        </asp:TemplateColumn>


В коде ascx был обработчик ItemCommand, примерно такой.
(писалось на vb, но это не суть).

    Private Sub DataGrid_Sheet_ItemCommand( _
     ByVal source As Object, _
     ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
     Handles DataGrid_Sheet.ItemCommand

        'we should check what the control have raised the event
        Dim pControl As WebControl
        Dim pRowView As DataRowView
        ....

        'check the item type of event source
        If e.Item.ItemType <> ListItemType.AlternatingItem And _
         e.Item.ItemType <> ListItemType.Item And _
         e.Item.ItemType <> ListItemType.EditItem And _
         e.Item.ItemType <> ListItemType.SelectedItem Then
            Exit Sub
        End If

        'obtain the source control
        pControl = e.CommandSource
        ....

        'check the type of source control
        Select Case pControl.ID
            Case "LinkButton_ProposalID"
                'the poroposal ID was clicked, fire item selected event
                RaiseEvent ItemSelect(e.Item.ItemIndex, ....)
            Case "ImageButton_Status"
                'the Status button was clicked, fire item delete event
                RaiseEvent ItemStatus(e.Item.ItemIndex, ....)
            Case Else
                Exit Sub
        End Select

    End Sub


Контрол rais-ит события. Страница подписывается на события контрола.
Имею скафандр — готов путешествовать!
Re: Динамически создать компонент.
От: Аноним  
Дата: 10.06.04 13:21
Оценка:
Здравствуйте, Apetrenko, Вы писали:

A>Ситуация такая.


A>Есть DataGrid, в определенные ячейки нужно кинуть link и на клик на любой из link(URLLabel)

A>вызвать функцию C# с определенным параметром.


A>Как заполнить ручками определенные ячейки DataGrid я знаю.

A>А вот как создать урл и повесить на него функцию С# не знаю. Где копать?
сунуть в ячейку стандартный HyperLinkButton (или как там его..)
Re[2]: Динамически создать компонент.
От: Аноним  
Дата: 10.06.04 13:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Apetrenko, Вы писали:


A>>Ситуация такая.


A>>Есть DataGrid, в определенные ячейки нужно кинуть link и на клик на любой из link(URLLabel)

A>>вызвать функцию C# с определенным параметром.


A>>Как заполнить ручками определенные ячейки DataGrid я знаю.

A>>А вот как создать урл и повесить на него функцию С# не знаю. Где копать?
А>сунуть в ячейку стандартный HyperLinkButton (или как там его..)

Окей, всуну.

Но их много. как определить на кого нажали и соответственно запустить C# функцию?
Re[3]: Динамически создать компонент.
От: mogadanez Чехия  
Дата: 10.06.04 14:02
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, Apetrenko, Вы писали:


A>>>Ситуация такая.


A>>>Есть DataGrid, в определенные ячейки нужно кинуть link и на клик на любой из link(URLLabel)

A>>>вызвать функцию C# с определенным параметром.


A>>>Как заполнить ручками определенные ячейки DataGrid я знаю.

A>>>А вот как создать урл и повесить на него функцию С# не знаю. Где копать?
А>>сунуть в ячейку стандартный HyperLinkButton (или как там его..)

А>Окей, всуну.


А>Но их много. как определить на кого нажали и соответственно запустить C# функцию?


установить CommandName одинаковое для всех, CommandArgument специфичное для каждого например Id строки
обработать событие ItemCommand Грида, проверяя выше указаные параметры
... << RSDN@Home 1.1.3 stable >>
Re[3]: Динамически создать компонент.
От: gas  
Дата: 10.06.04 14:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Но их много. как определить на кого нажали и соответственно запустить C# функцию?


добавляешь обработчик MyDataGrid.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(MyDataGrid_ItemCommand);

private void MyDataGrid_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
    if (e.CommandName == "ButtonName")
    {
        int row = e.Item.ItemIndex;
    }
}


зная строку знаешь на кого нажали и можешь запустить свою функцию
Re[3]: Динамически создать компонент.
От: Ransom Stark Россия  
Дата: 10.06.04 20:52
Оценка:
A>>>Есть DataGrid, в определенные ячейки нужно кинуть link и на клик на любой из link(URLLabel)
A>>>вызвать функцию C# с определенным параметром.
A>>>Как заполнить ручками определенные ячейки DataGrid я знаю.
A>>>А вот как создать урл и повесить на него функцию С# не знаю. Где копать?
А>>сунуть в ячейку стандартный HyperLinkButton (или как там его..)

А>Но их много. как определить на кого нажали и соответственно запустить C# функцию?

В обработчике ItemDataBound грида находишь нужный контрол (LinkButton), и назначаешь ему обработчик нажатия. Соответственно, в обработчике делаешь, что нужно. Примерно так:
            <asp:DataGrid id="dgGrid" runat="server">
                <Columns>
                    <asp:TemplateColumn>
                        <ItemTemplate>
                            <asp:Label id="lblNumber" runat="server" />
                            <asp:LinkButton ID="lbLink" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateColumn>
                </Columns>
            </asp:DataGrid>
            <asp:Label ID="lblText" Runat="server" />

        private void lbLink_Click(object sender, EventArgs e)
        {
            DataGridItem dgItem = (sender as LinkButton).NamingContainer as DataGridItem;
            lblText.Text = "Нажата ссылка " + (dgItem.FindControl("lblNumber") as Label).Text;
        }

        private void dgGrid_ItemDataBound(object sender, DataGridItemEventArgs e)
        {
            if(e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem)
                return;

            Label lblNumber = e.Item.FindControl("lblNumber") as Label;
            lblNumber.Text = string.Format("<b>{0}</b>", e.Item.DataItem.ToString());

            LinkButton lbLink = e.Item.FindControl("lbLink") as LinkButton;
            lbLink.Text = "link" + lblNumber.Text;
            lbLink.Click += new EventHandler(lbLink_Click);
        }

ну и нужно учесть, что в момент вызова обработчика кнопки DataItem будет null.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.