Asp.net 为动态生成的字段编辑GridView
我的观点如下 它具有EmptyDatatemplate和命令字段Asp.net 为动态生成的字段编辑GridView,asp.net,vb.net,gridview,datatable,Asp.net,Vb.net,Gridview,Datatable,我的观点如下 它具有EmptyDatatemplate和命令字段 <asp:GridView ID="AGridView" runat="server" AutoGenerateColumns="true" style="table-layout:fixed;" Width="2000px" RowStyle-HorizontalAlign="Left"> <EmptyDataTemplate>
<asp:GridView ID="AGridView" runat="server" AutoGenerateColumns="true" style="table-layout:fixed;" Width="2000px" RowStyle-HorizontalAlign="Left">
<EmptyDataTemplate>
</EmptyDataTemplate>
<asp:CommandField ShowEditButton="True" ItemStyle-Width="80px" EditText="Edit">
<ItemStyle Font-Bold="true" Font-Size="Small" />
<HeaderStyle CssClass="AAddOn" />
</asp:CommandField>
</asp:GridView>
现在,如果我点击编辑,我只需要编辑年龄列
如果我给AGridView.EditIndex=e.NewEditIndex,整行都会被编辑
暗藏
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
这很简单。无论您不希望编辑哪些列,只需将它们添加到网格的DataKeyNames属性中即可。试试这个
<asp:GridView ID="AGridView" runat="server" AutoGenerateColumns="true" style="table-layout:fixed;" Width="2000px" RowStyle-HorizontalAlign="Left" DataKeyNames = "Name,Country" >
<EmptyDataTemplate>
</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
私有子AGridView_RowEditing(ByVal sender作为对象,ByVal e作为System.Web.UI.WebControl.GridViewEditEventArgs)处理AGridView.RowEditing
尝试
Dim COLSTOTEDIT As列表
//C#代码
for(int i=0;i
这很简单。无论您不希望编辑哪些列,只需将它们添加到网格的DataKeyNames属性中即可。试试这个
<asp:GridView ID="AGridView" runat="server" AutoGenerateColumns="true" style="table-layout:fixed;" Width="2000px" RowStyle-HorizontalAlign="Left" DataKeyNames = "Name,Country" >
<EmptyDataTemplate>
</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
私有子AGridView_RowEditing(ByVal sender作为对象,ByVal e作为System.Web.UI.WebControl.GridViewEditEventArgs)处理AGridView.RowEditing
尝试
Dim COLSTOTEDIT As列表
//C#代码
for(int i=0;i
另一个选项是不使用AutoGenerateColumns功能并指定列模板
通过这种方式,可以为每列指定ItemTemplate、EditTemplate或FooterTemplate
因此,对于您不想编辑的列,即名称使用
和年龄使用:
<asp:TemplateField>
<ItemTemplate><asp:Label>Bind Me</asp:Label></ItemTemplate>
<EditItemTemplate><asp:TextBox>Bind Me</asp:TextBox></EditItemTemplate>
</asp:TemplateField>
您可以在databind调用之前添加一个循环,如下所示:
string DataKeyNames = "";
foreach (DataColumn dc in dtRowData.Columns)
{
if(dc.Name != "Age")
DataKeyNames += dc.Name + ",";
}
然后在绑定前设置GridView1.DataKeyNames=DataKeyNames
您可能需要在DataKeyNames上执行子字符串以删除尾部,另一个选项是不使用AutoGenerateColumns功能并指定列模板 通过这种方式,可以为每列指定ItemTemplate、EditTemplate或FooterTemplate 因此,对于您不想编辑的列,即名称使用
和年龄使用:
<asp:TemplateField>
<ItemTemplate><asp:Label>Bind Me</asp:Label></ItemTemplate>
<EditItemTemplate><asp:TextBox>Bind Me</asp:TextBox></EditItemTemplate>
</asp:TemplateField>
您可以在databind调用之前添加一个循环,如下所示:
string DataKeyNames = "";
foreach (DataColumn dc in dtRowData.Columns)
{
if(dc.Name != "Age")
DataKeyNames += dc.Name + ",";
}
然后在绑定前设置GridView1.DataKeyNames=DataKeyNames
您可能需要在DataKeyNames上执行一个子字符串以删除尾随,我在这里没有什么问题。.我的列是动态生成的。Iam将我的gridview与动态生成列的datatable绑定。在gridview中,是否可以像datakeynames中提到的那样添加需要编辑的列,而不是不需要编辑的列..我知道你的问题了。我可以看到的可能解决方案是,在gridview列的RowEditing事件循环中创建带有不可编辑字段的字符串数组。然后将Datakeyname分配给数组。您可以帮助我编写代码吗..如何将Datakeyname与gridview绑定行编辑生成的值,如您在上述场景中所述编辑答案。答案在C#中有循环,将其更改为VB.NET。该代码可能很少有语法错误。需要离开。嗨,什么是grdToDisplay,colsToNotEdit在你的代码中的意思。我在这里没有什么问题。我的列是动态生成的。我正在将我的gridview与动态生成列的datatable绑定。在gridview中,是否可以像datakeynames中提到的那样添加需要编辑的列,而不是不需要编辑的列..我知道你的问题了。我可以看到的可能解决方案是,在gridview列的RowEditing事件循环中创建带有不可编辑字段的字符串数组。然后将Datakeyname分配给数组。您可以帮助我编写代码吗..如何将Datakeyname与gridview绑定行编辑生成的值,如您在上述场景中所述编辑答案。答案在C#中有循环,将其更改为VB.NET。该代码可能很少有语法错误。需要离开。您好,什么是grdToDisplay,colsToNotEdit在您的代码中是什么意思。我的列是动态生成的。.我将我的gridview与动态生成列的datatable绑定,因此我无法使用项模板。.您是否在代码中动态创建列?如果没有,您仍然可以指定列,只需使用datafield属性指定该列必须链接到的数据库列。是的,我的datatable正在动态检索列。例如,列可能是A、B、C,下一次更改时,它可能是A、B、C、D,所以我不能像你提到的那样使用模板字段,也不能像Vicky在下面的帖子中提到的那样使用datakeyname。,有没有其他选择,你仍然可以像上面提到的那样使用DataName,您只需在基于列名称检索datatable之后动态构建字符串,然后在DataIndedit之前设置datakeynames值。我的答案为您提供一个ideaMy列是动态生成的。Iam将我的gridview与生成