2009-12-31 5 views
1

Относительно Link loaded into my gridview try to navigate to my local server. Столбцы, которые у меня есть в datagrid: Customer #, Description, Link.Как отредактировать данные, привязанные к datagrid?

У меня есть функция, которая вызвана в rowDataBound, но как получить, какая ссылка находится в строке, чтобы я мог ее отредактировать, а затем перевязать ее к datagrid?

protected void grdLinks_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowIndex == 2) 
    { 

    } 
} 

А вот мой GridView код

<asp:GridView ID="grdLinks" runat="server" AutoGenerateColumns="False" DataSourceID="ldsCustomerLinks" 
      OnRowDataBound="grdLinks_RowDataBound" EmptyDataText="No data was returned." 
      DataKeyNames="ID" OnRowDeleted="grdLinks_RowDeleted" Width="80%" BackColor="White" 
      HorizontalAlign="Center" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" 
      CellPadding="3" GridLines="Vertical"> 
      <RowStyle BackColor="#EEEEEE" ForeColor="Black" /> 
      <Columns> 
       <asp:BoundField DataField="CustomerNumber" HeaderText="Customer Number" SortExpression="CustomerNumber" /> 
       <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" /> 
       <asp:HyperLinkField DataTextField="Link" HeaderText="Link" SortExpression="Link" DataNavigateUrlFields="Link" Target="_blank" /> 
      </Columns> 
</asp:GridView> 

<asp:LinqDataSource ID="ldsCustomerLinks" runat="server" ContextTypeName="ComplianceDataContext" 
      TableName="CustomerLinks" EnableDelete="true"> 
</asp:LinqDataSource> 

ответ

1

Если я правильно понять, вы хотите, чтобы получить значение элемента данных называется Link. Если да, то что-то подобное должно работать:

EDIT: Я думаю, что вы говорите, что вы хотите, чтобы захватить значение Link из базы данных, управлять ею, а затем установить URL-адрес в HyperLink к новое, управляющее значение, если да, то она будет выглядеть следующим образом:

ASPX Страница (Обновлено с учетом размещенной код)

<Columns> 
    <asp:BoundField DataField="CustomerNumber" HeaderText="Customer Number" SortExpression="CustomerNumber" /> 
    <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" /> 
    <asp:TemplateField HeaderText="Link"> 
     <ItemTemplate> 
      <asp:HyperLink ID="hlParent" runat="server" Text='<% #(Eval("Link")) %>' /> 
     </ItemTemplate> 
    </asp:TemplateField> 
</Columns> 

Я изменил ASP от исходного вопроса, добавив ID и удаление ссылки на атрибут NavigateUrl из элемента управления HyperLink.

Код

protected void grdLinks_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     string link = DataBinder.Eval(e.Row.DataItem, "Link") as string; 
     if (link != null && link.Length > 0) 
     { 
      // "FindControl" borrowed directly from DOK 
      HyperLink hlParent = (HyperLink)e.Row.FindControl("hlParent"); 
      if (hlParent != null) 
      { 
       // Do some manipulation of the link value 
       string newLink = "https://" + link 

       // Set the Url of the HyperLink 
       hlParent.NavigateUrl = newLink; 
      } 
     } 
    } 
} 
+0

Да, это то, что я хотел. Однако как я могу показать обновленную ссылку в datagrid после того, как я ее изменил? – Justen

+0

Предполагая, что управление связью определено в сетке, тогда вы хотите сделать FindControl, который DOK упоминает и устанавливает это с помощью значения, которое вы захватили. – CAbbott

+0

Функция FindControl устанавливается равной переменной HyperLink. Как преобразовать переменную HyperLink в строку, а затем вернуться к HyperLink? – Justen

1

RowDataBound вызывается для каждой строки в GridView, включая заголовки, колонтитулы и т.д. Таким образом, вы должны начать с изучения только строки, содержащие данные.

Как только вы находитесь в строке, есть несколько способов изучить ячейки. Один из них - просто использовать индекс ячейки (здесь 2). Это кажется простым в вашей ситуации, но приведет к разочарованию, если вы когда-нибудь измените столбцы.

Вот пример того, что из MSDN:

void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e) 
    { 

    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     // Display the company name in italics. 
     e.Row.Cells[1].Text = "<i>" + e.Row.Cells[1].Text + "</i>"; 

    } 

Лучший способ заключается в использовании FindControl с идентификатором элемента.

protected void gvBarcode_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
    HyperLink hlParent = (HyperLink)e.Row.FindControl("hlParent"); 
    } 
} 
+0

Я не совсем уверен, как отредактировать его с помощью метода FindControl(). Что мне делать, чтобы перейти от Hyperlink к String и вернуться к гиперссылке? – Justen

+0

В приведенном выше фрагменте кода вы ссылаетесь на объект hlParent HyperLink. Теперь вы можете написать такой код, как hlParent.NavigateURL = "someURL". В вашем коде просто введите hlParent и точку и введите ntellisense. – DOK

+0

Я пробовал это, и это дает мне ошибку: «Ссылка на объект не установлена ​​в экземпляр объекта». – Justen

0

Возможно, вы также захотите рассмотреть возможность использования gridview для вас.

Свойство datanavigateurlformatstring можно использовать для вставки параметров запроса, если это то, что вы пытаетесь сделать.

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

+0

Ну, это не просто вставка параметров, я должен сначала проверить. Например, если пользователь ввел «google.com», мне нужно отформатировать его на «http://www.google.com» или если они входят в «www.stackoverflow.com», мне нужно, чтобы он был отформатирован на «http: //www.stackoverflow.com «Если есть способ сделать это с помощью datanaviagteformatstring, то я был бы рад узнать. – Justen

+0

ну, этот сайт автоформатирует его, но мне нужно добавить http: // и www. к ссылкам, в которых они не введены пользователем, чтобы он стал абсолютным URL-адресом, а не относительным URL-адресом – Justen

+0

Ahh. Теперь я вижу - вы меняете его, когда пользователь вводит его? или только для отображения? –

Смежные вопросы