Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > По клику на записи в таблице (or DataGrid) переход


Автор: Medved 11.5.2007, 13:07
Как реализовать такой механизм.

На странице отображаются данные из таблицы в БД.

Необходимо кликнуть на нужную запись и перейти на новую страницу, в которой будет отображена форма для редактирования этой записи. 

Или говоря по другому мне необходимо реализовать такой же функционал, как здесь http://oneboarddemo.informicus.ru/Login.aspx
Логин: test
Пароль: test

Автор: tol05 11.5.2007, 13:54
например так (пример из MSDN)
Код

<asp:gridview id="OrdersGridView" 
        datasourceid="OrdersSqlDataSource" 
        autogeneratecolumns="false"
        runat="server">
                
        <columns>
                
          <asp:boundfield datafield="OrderID" headertext="Order ID"/>
          <asp:boundfield datafield="ProductID" headertext="Product ID"/>

          <asp:hyperlinkfield datatextfield="UnitPrice"
            datatextformatstring="{0:c}"
            datanavigateurlfields="ProductID"
            datanavigateurlformatstring="~\details.aspx?ProductID={0}"          
            headertext="Price"
            target="_blank" />
          
          <asp:boundfield datafield="Quantity" headertext="Quantity"/>
                 
        </columns>
                
      </asp:gridview>

<asp:sqldatasource id="OrdersSqlDataSource"  
        selectcommand="SELECT [OrderID], [ProductID], [UnitPrice], [Quantity] FROM [Order Details]"
        connectionstring="server=localhost;database=northwind;integrated security=SSPI"
        runat="server">
      </asp:sqldatasource>



Думаю, принцип понятен.

http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.aspx
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.hyperlinkfield.aspx

Автор: Mymik 11.5.2007, 14:08
Medved, Либо, если так как там это реализовано (по нажатию "поручение") то это делается с помощью CommandeName и CommandArgument
т.е. в GridView ты прописываешь в поле ItemTemplate
Код

<asp:TemplateField HeaderText="Service" SortExpression="ServiceName">
    <ItemTemplate>
        <asp:LinkButton CommandName="OneView" CommandArgument='<%# Eval("ProductID") %>' runat="server" />
    </ItemTemplate>
</asp:TemplateField>

причем CommangArgument это строка, так что туда спокойно можно передавать несколько элементов.
Но при все этом ты должен будешь перехватывать OnRowCommand у GridView. Если его перехватываешь, то у класса GridViewCommandEventArgs есть свойство CommandArgument которое и возвращает строку CommandArgument. Дальше ты ее парсишь и можешь делать все что хочешь с ней... вот так вот.

Немного дольше писать. Но при этом есть возможность фильтровать какие-нибудь данные или действия какие-нибудь сделать до того как послать пользователя на другую страницу. Либо что гораздо лучше (как по мне) Так это поставить PlaceHolder по умолчанию он скрыт. А когда ты перехватываешь это событие, то ты делаешь этот PlaceHolder видимым и туда засовываешь данные что тебе нужно редактировать. Типа пользователь не видит командной строки ну и тебе лучше (ибо все что приходит от пользователя это зло) и пользователю спокойнее -- он не пугается страшных GET запросов.

Автор: dazy 11.5.2007, 14:14
Я делал так:
В GidView делаешь TemplatedField, в него ложишь LinkButton. Свойство Text - биндишь на поле которое должно отображаться в линке, свойство CommandArgument - биндишь на ID записи.
В обработчике:
Код

    protected void LinkButton_Click(object sender, EventArgs e) {
        Session["EditingID"] = (sender as LinkButton).CommandArgument;
        Response.Redirect("~/EditRecord.aspx");
    }

На страничке EditRecord.aspx, лежит ObjectDataSource,  ему в качестве входного параметра даешь EditingID из Session, можно сделать через смарттэг, Configure Data Source, там на предпоследнем экране Define Parametrs, заполняешь: Parametr Source - Session, SessionField - EditingID.
Полчается в коде:
Код

        <SelectParameters>
            <asp:SessionParameter Name="ID" SessionField="EditingID" Type="Object" />
        </SelectParameters>

Естественно этот ObjectDataSource должен выдавать в страничку одну запись.

Ну а дальше дело техники, связываешь что-то _там_View с ObjectDataSource, и при загрузке странички переводишь режим редактирования.


Автор: Medved 11.5.2007, 16:03
Спасибо за вашу помощь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)