Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 为动态生成的字段编辑GridView_Asp.net_Vb.net_Gridview_Datatable - Fatal编程技术网

Asp.net 为动态生成的字段编辑GridView

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> &nbsp;

我的观点如下

它具有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>
现在,如果我点击编辑,我只需要编辑年龄列

如果我给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>
           &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

私有子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>
           &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

私有子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与生成