通过设置datagridview的datasource将指定的数据库里面的table显示在datagridview中以后:
this.dataGridView1.AutoGenerateColumns = true;           rdset rdset=new rdset ();           rdsetTableAdapters.projectTableAdapter projectadapter = new rdsetTableAdapters.projectTableAdapter();
           this.dataGridView1.DataSource = rdset.project;
           projectadapter.Fill(rdset.project);
其中rdset.project表有三个列:project_name, project_label,time_used;我想只让第三个列(time_used)可编辑(第三列是空列,我是加在数据库中让用户填数据的,提交的时候将该行加到另一个表中,所以前两列的数据是不能改的) 这时要设置第一第二列只读怎么办?
我看到datagridview属性里面有一项readonly,但是这个作用于整个表,怎样才能实现?

解决方案 »

  1.   

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                DataKeyNames="id"  Width="402px" onrowupdating="GridView1_RowUpdating" 
                onrowcancelingedit="GridView1_RowCancelingEdit" 
                onrowediting="GridView1_RowEditing">
                <Columns>
                  <asp:TemplateField >
                       <HeaderTemplate>Product</HeaderTemplate>
                       <ItemTemplate><%#Eval("Product") %></ItemTemplate>
                  </asp:TemplateField>
                  <asp:TemplateField >
                        <HeaderTemplate>Version</HeaderTemplate>
                        <ItemTemplate> <%#Eval("Version")%></ItemTemplate>
                   </asp:TemplateField>
                   <asp:TemplateField >
                        <HeaderTemplate>Description</HeaderTemplate>
                        <ItemTemplate> <%#Eval("Description")%>
                                            <asp:Button  ID="fahuo" Text="发货" OnClick="fahuo_Click" CommandArgument='<%#Eval("id") %>' runat="server"/>
                         </ItemTemplate>
                          <EditItemTemplate>
                          <asp:TextBox ID="TextAccAddress" runat="server" Text='<%# Eval("Description") %>'></asp:TextBox>
                          </EditItemTemplate>
                   </asp:TemplateField>
                    <asp:CommandField HeaderText="编辑" ShowEditButton="True" />
                </Columns>
            </asp:GridView>
    <EditItemTemplate>
                          <asp:TextBox ID="TextAccAddress" runat="server" Text='<%# Eval("Description") %>'></asp:TextBox>
                          </EditItemTemplate>
    只编辑你想要的列。例如你的第三个列(time_used)
    即可剩下你应该会了吧
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex;
           BindTest();//绑定数据就是显示在gridview的数据
        }
        protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            GridView1.EditIndex = -1;
            BindTest();//绑定数据就是显示在gridview的数据
        }
      

  2.   

    http://blog.csdn.net/21aspnet/archive/2007/03/25/1540301.aspx 在不会就看这里
      

  3.   

    datagridview启用编辑,然后对每列的ReadOnly属性按需要进行设置
      

  4.   

    没有看懂 不过现在我已经将this.dataGridView1.AutoGenerateColumns = false;了
    然后一列一列的设置了,还好,不影响外观.