2016-11-14 82 views
0

我的GridView的是如下編輯的GridView動態生成的場

它EmptyDatatemplate和命令字段

<asp:GridView ID="AGridView" runat="server" AutoGenerateColumns="true" style="table-layout:fixed;" Width="2000px" RowStyle-HorizontalAlign="Left"> 
     <EmptyDataTemplate> 
      &nbsp; 
     </EmptyDataTemplate> 
     <asp:CommandField ShowEditButton="True" ItemStyle-Width="80px" EditText="Edit"> 
     <ItemStyle Font-Bold="true" Font-Size="Small" /> 
      <HeaderStyle CssClass="AAddOn" /> 
     </asp:CommandField> 
    </asp:GridView> 

的GridView看起來

Name Age Country 
A  10 NNN  Edit 
B  23 NNN  Edit 

現在,如果我點擊編輯我只需要年齡欄編輯

如果我給AGridView.EditIndex = e.NewEditInde X整行編輯

在代碼隱藏

Private Sub AGridView_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles AGridView.RowEditing 
      Try 
       AGridView.EditIndex = e.NewEditIndex 

       AGridView.DataSource = SessionItems.ADataset.Tables("AHello") 
       AGridView.DataBind() 

      Catch ex As Exception 
       SetErrorMsg(ex.Message.ToString, "Error") 
      End Try 
     End Sub 

回答

1

這很簡單。無論您不希望編輯哪些列,只需將其添加到DataKeyNames網格屬性中即可。嘗試這個。

<asp:GridView ID="AGridView" runat="server" AutoGenerateColumns="true" style="table-layout:fixed;" Width="2000px" RowStyle-HorizontalAlign="Left" DataKeyNames = "Name,Country" > 
     <EmptyDataTemplate> 
      &nbsp; 
     </EmptyDataTemplate> 
     <asp:CommandField ShowEditButton="True" ItemStyle-Width="80px" EditText="Edit"> 
     <ItemStyle Font-Bold="true" Font-Size="Small" /> 
      <HeaderStyle CssClass="AAddOn" /> 
     </asp:CommandField> 
    </asp:GridView> 


    Private Sub AGridView_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles AGridView.RowEditing 
       Try 

        Dim colsToNotEdit As List<string> 

//C# code 

     for (int i = 0; i < AGridView.HeaderRow.Cells.Count; i++) 
    { 
     if(AGridView.HeaderRow.Cells[i].Text !="age") 
      colsToNotEdit.Add(grdToDisplay.HeaderRow.Cells[i].Text); 
    } 
      AGridView.DataKeyNames = colsToNotEdit.ToArray() 
    AGridView.EditIndex = e.NewEditIndex 

        AGridView.DataSource = SessionItems.ADataset.Tables("AHello") 
        AGridView.DataBind() 

       Catch ex As Exception 
        SetErrorMsg(ex.Message.ToString, "Error") 
       End Try 
      End Sub 
+0

我在這裏沒有什麼問題..我的列是動態生成的.Iam綁定我的gridview與數據表,動態生成列。是否有可能在gridview無論列需要編輯可以添加像你在datakeynames中提到,而不是列不需要編輯.. – havin

+1

我得到你的問題。我可以看到,在GridEditor的RowEditing事件循環中創建一個帶有不可編輯字段的字符串數組。然後將DataKeyNames分配給該數組。 –

+0

你可以幫我編碼..如何綁定DataKeysname與GridView rowediting生成的值,如上所述與上述scenerio – havin

1

另一種選擇是不使用AutoGenerateColumns功能並指定列模板。

這樣您可以爲每列指定ItemTemplate,EditTemplate或FooterTemplate。

所以對於你不想編輯的列,即。名稱使用<asp:BoundField>和年齡使用:

<asp:TemplateField> 
    <ItemTemplate><asp:Label>Bind Me</asp:Label></ItemTemplate> 
    <EditItemTemplate><asp:TextBox>Bind Me</asp:TextBox></EditItemTemplate> 
</asp:TemplateField> 

編輯:當使用動態列名

如果您擁有一個包含數據的數據表,可以說dtRowData

你應該有一段代碼在您指定的DataTable到網格:

string DataKeyNames = ""; 
foreach (DataColumn dc in dtRowData.Columns) 
{ 
    if(dc.Name != "Age") 
     DataKeyNames += dc.Name + ","; 
} 

然後前:

GridView1.DataSource = dtRowData; 
GridView1.DataBind(); 

你可以在數據綁定調用之前添加如下循環綁定集GridView1.DataKeyNames = DataKeyNames

您可能需要在DataKeyNames上執行子字符串以刪除尾部,

+0

我的專欄是動態生成的..我綁定我的gridview與datatable,它動態地生成列,因此我不能使用項目模板.. – havin

+0

您是否在代碼中動態創建列?如果不是,您仍然可以指定列,只需使用datafield屬性來指定它必須鏈接到的數據庫列。 – ThatChris

+0

是的,我的數據表是動態檢索列。例如列可能是A,B,C,下一次它變化,所以它可以是A,B,C,D,E ..所以我不能像你提到的那樣使用模板字段或使用datakeyname作爲Vicky提到下面的帖子..是否有其他替代 – havin