我有一个DataGridView控件,里面已经填充好数据,现在我需要通过点击控件中的数据(就是做成超连接的形式),然后赋予到一个文本框,假定名为TextBox1,具体应该怎么做呢?关键是如何将DataGridView中的数据做成可点击的超连接的形式呢?

解决方案 »

  1.   

    我知道可以通过添加DataGridViewLinkColumn的方式实现,可如何在选中时得到值,我不知道
      

  2.   

    ASP.NET没有DataGridView控件,你说的是DataGrid还是GridView?
      

  3.   

    是gridview,太激动,说错了,WEB窗体
      

  4.   

    GridView
    <a href='<%#Eval("datafield","aa.aspx?text={0}")%'></a>
      

  5.   

    既然说DataGridViewLinkColumn,那么应该是windows窗体程序了        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                //假定你的第0列为DataGridViewLinkColumn
                if (e.ColumnIndex == 0)
                {
                    DataGridViewLinkCell cell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewLinkCell;
                    textBox1.Text= cell.Value.ToString();
                }
            }
      

  6.   

    ls 的应该是web程序,GridView的数据绑定技术。
      

  7.   

    是web啊
    <a href=' <%#Eval("datafield","aa.aspx?text={0}")%'> </a>
    这个超连接,怎么加,什么含义,能不能解释一下啊
      

  8.   


    就是模版列吧,参考下,对gridview 一样的,找到列的主KEY的方法就可以进行操作了
    <%@ Page Language="C#" AutoEventWireup="True" %>
    <%@ Import Namespace="System.Data" %><html>
       <script runat="server">      DataTable Store = new DataTable();
          DataView StoreView;        void Page_Load(Object sender, EventArgs e) 
          {
             if(Session["StoreData"] == null)
             {
                DataRow dr;
     
                Store = new DataTable();                  Store.Columns.Add(new DataColumn("Tax", typeof(String)));
                Store.Columns.Add(new DataColumn("Item", typeof(String)));
                Store.Columns.Add(new DataColumn("Price", typeof(String)));            Session["StoreData"] = Store;
                
                // Create sample data.
                for (int i = 1; i <= 4; i++) 
                {
                   dr = Store.NewRow();               dr[0] = "0.0%";
                   dr[1] = "Item " + i.ToString();
                   dr[2] = (1.23 * (i + 1)).ToString();
     
                   Store.Rows.Add(dr);
                }                }
             else
                Store = (DataTable)Session["StoreData"];         StoreView = new DataView(Store);
             StoreView.Sort="Item";         if(!IsPostBack)                    
                BindGrid();
                       
          }      void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs e) 
          {
             MyDataGrid.EditItemIndex = e.Item.ItemIndex;
             BindGrid();
          }      void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e) 
          {
             MyDataGrid.EditItemIndex = -1;
             BindGrid();
          }      void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e) 
          {
             // Get the text box that contains the price to edit. 
             // For bound columns the edited value is stored in a text box.
             // The text box is the first control in the Controls collection.
             TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];         // Get the check box that indicates whether to include tax from the 
             // TemplateColumn. Notice that in this case, the check box control is
             // second control in the Controls collection.
             CheckBox taxCheck = (CheckBox)e.Item.Cells[2].Controls[1];         String item = e.Item.Cells[1].Text;
             String price = priceText.Text;
           
             DataRow dr;         // With a database, use an update command.  Since the data source is 
             // an in-memory DataTable, delete the old row and replace it with a new one.         // Remove old entry.
             StoreView.RowFilter = "Item='" + item + "'";
             if (StoreView.Count > 0)
                StoreView.Delete(0);
             StoreView.RowFilter = "";
     
             // Add new entry.
             dr = Store.NewRow();         if (taxCheck.Checked)
                dr[0] = "8.6%";
             else 
                dr[0] = "0.0%";
             dr[1] = item;
             dr[2] = price;
             Store.Rows.Add(dr);         MyDataGrid.EditItemIndex = -1;
             BindGrid();
          }      void BindGrid() 
          {
             MyDataGrid.DataSource = StoreView;
             MyDataGrid.DataBind();
          }   </script><body>   <form runat="server">      <h3>TemplateColumn Example</h3>      <asp:DataGrid id="MyDataGrid" runat="server"
               BorderColor="black"
               CellPadding="2"        
               OnEditCommand="MyDataGrid_Edit"
               OnCancelCommand="MyDataGrid_Cancel"
               OnUpdateCommand="MyDataGrid_Update"
               ShowFooter="True"
               AutoGenerateColumns="false">         <Columns>            <asp:EditCommandColumn
                     EditText="Edit"
                     CancelText="Cancel"
                     UpdateText="Update"
                     ItemStyle-Wrap="false"
                     HeaderText="Edit Controls"/>            <asp:BoundColumn HeaderText="Description" 
                     ReadOnly="true" 
                     DataField="Item"/>            <asp:TemplateColumn>               <HeaderTemplate>
                      <b> Tax </b>
                   </HeaderTemplate>               <ItemTemplate>
                      <asp:Label
                           Text='<%# DataBinder.Eval(Container.DataItem, "Tax") %>'
                           runat="server"/>
                   </ItemTemplate>               <EditItemTemplate>                  <asp:CheckBox
                           Text="Taxable" 
                           runat="server"/>               </EditItemTemplate>               <FooterTemplate>
                      <asp:HyperLink id="HyperLink1"
                           Text="Microsoft"
                           NavigateUrl="http://www.microsoft.com"
                           runat="server"/>
                   </FooterTemplate>            </asp:TemplateColumn>            <asp:BoundColumn HeaderText="Price" 
                     DataField="Price"/>         </Columns>      </asp:DataGrid>   </form></body>
    </html>
      

  9.   


    跳转到aa.aspx页面,传参数为text,值为datafield(即你的字段)
      

  10.   

    csshan的方法我怎么不太看的懂
      

  11.   

    参考下面这个示例,测试通过<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <a href="javascript:getCellValue('<%#Eval("Account") %>')"  id='<%# Eval("Account","AccountHref{0}") %>'><%# Eval("Account") %></a>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
    </asp:GridView>
        <asp:TextBox ID="TextBox2"  runat="server"></asp:TextBox>
    <script language="javascript" type="text/javascript">
        function getCellValue(accId)
        {
            alert(document.getElementById("AccountHref"+accId).innerHTML);
            document.getElementById('<%= TextBox2.ClientID %>').value=document.getElementById("AccountHref"+accId).innerHTML;
        }
    </script>
      

  12.   

    你说的TextBox1,我这里使用的是TextBox2.
    当点击链接时,使用javascript把链接的值放入TextBox2.
      

  13.   

    另外,我使用了一个DataSource1,绑定的列是Account,你测试时要试你的情况来做修改.
      

  14.   

    <a href='  <%#Eval("datafield","aa.aspx?text={0}")%'> 这里加你要链接的对象(按钮\textbox..) </a> 
      

  15.   

    <a href='   <%#Eval("datafield","aa.aspx?text={0}")%'> 这里加你要链接的对象(按钮\textbox..)  </a>
    请问下,你们都说text={0},这个表示传参,那么这个{0},难道是这个字段的值?
      

  16.   

    而且,这样会把页面转到另一个页面,而我是先在同一个页面的textbox赋值
      

  17.   

    不过这句我没看明白
    <%# Eval("Account","AccountHref{0}") %>'>
    Eval是取值的明明吗?AccountHref{0}又是什么含义?
      

  18.   

    用到的三个数据绑定表达式解释如下(我使用的是Account列,你要视你的情况做修改):href="javascript:getCellValue('<%#Eval("Account") %>')"  
    -----------
    这个是构造javascript代码,绑定Account做为getCellValue的参数id='<%# Eval("Account","AccountHref{0}") %>'>
    -----------
    这个是设置<a>标记的ID,javascript是通过id来找到某个<a>标记并获得它的innerHTML值的。
    ID必须是惟一的,这里我假定Account是一个主键列或者惟一列,假如Account的值为god_xp,那么<a>的ID就是"AccountHrefgod_xp"
    之所以加个AccountHref前缀,是为了防止页面中还有其他的同ID的HTML标记,没有其他意思,你可以使用任何的前缀,即使不使用前缀也行(前提是要保证ID是唯一的)。<%# Eval("Account") %>
    ---------------
    这个是设置<a>标记在客户端显示的内容,也就是javascript中要获取的值.
      

  19.   

    我想你解释的非常清楚了,JS代码我也能看的懂,我最不明白的就是“Eval”,这是个.net的函数吗?
      

  20.   

    Eval是ASP.NET的数据绑定表达式。
    如果你有装MSDN,可以参考
    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_aspnetcon/html/14cdd57d-0f82-4667-b503-73e1a96f136a.htm
    也可以在baidu或google中搜索"ASP.NET数据绑定表达式"
      

  21.   

    Eval 是用于绑定数据用到也可以在存储过程中将 要实现超链接的列 写成超链接形式,然后在gridview中将该列转换为模板列即可
      

  22.   

    可以在gridview 中添加模板列,模板列中添加超链接控件,绑定这个控件,就可以了。
    也可以用javascript实现,加个超链接,链接中写个onclick事件,出发事件,将值付给textbox就可以了
      

  23.   

    [color=#FF0000]08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    08年英语专业四级答案出售,绝对包过!!QQ:75934263
    [/color]
      

  24.   

    第2种方法,我想已经实现了,你说的第一种方法,我知道可以添加超链接字段,但是这个字段能绑定textbox控件吗?或者说,如何给textbox赋值呢
      

  25.   

    可以把数据放到数据集里,在数据集里可以设置某一列的链接属性,然后把数据集绑定到GrideView