aspnet和C#:如何将TemplateField链接到动态创建的匿名类型?
我有一个Linq查询返回一个匿名类型,然后我将其用作GridView的数据源。这些列中只有一列需要可编辑。我只是希望能够单击一个编辑按钮,并让该1列的所有行成为文本框(理想情况下)。我会满足于每行都有一个CommandField。问题是,如果不创建自定义类或手动处理所有字段,我不知道如何做到这一点。此列还必须以特定方式更新数据库中的值(因此我需要为该查询编写自定义代码)。
目前,我可以轻松地在网格视图中显示整个内容。我甚至创建了一个自定义DataTable用作数据源,并且可以正常工作。但是我仍然不知道如何添加编辑功能。我发现的教程要么是用于DataSource控件,要么是涉及制作扩展GridView的自定义类,以及不是。我在aspx页面中添加了一个CommandField,它可以正常工作,但DataTable中的ReadOnly列仍然可以编辑。
我宁愿有一个简单的解决方案......例如,在.aspx页面中创建一个TemplateField,我可以给一个Item和EditItem模板,并以某种方式绑定到我的Linq查询返回的字段。
我在下面加了一些伪代码,创建了2个GridView。一个只显示所有信息,但不可编辑。另一个使用DataTable显示ColA,来自aspx页面的ColB和空行以及来自代码隐藏页面的ColB填充。
将查询绑定到GridView:
var qry = from t in database
...
select new { colA, colB };
GridView2.DataSource = qry; // not shown in pseudocode
GridView2.DataBind();
制作DataTable
const string ColA = "ColA";
const string ColB = "ColB";
DataTable dt = new DataTable();
DataColumn dc = new DataColumn(ColA, typeof(System.String));
dt.Columns.Add(dc);
dc = new DataColumn(ColB, typeof(System.String));
dt.Columns.Add(dc);
foreach (var item in qry) {
DataRow dr = dt.NewRow();
dr[ColA] = item.ColA;
dt.Rows.Add(dr);
}
foreach (DataColumn col in dt.Columns) {
col.ReadOnly = false;
BoundField bf = new BoundField();
bf.DataField = col.ColumnName;
bf.HeaderText = col.ColumnName;
GridView1.Columns.Add(bf);
}
GridView1.DataSource = dt;
GridView1.DataBind();
在aspx页面中进行GridView控件
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" >
<Columns>
<asp:TemplateField HeaderText="ColB">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ButtonType="Button" ShowDeleteButton="True"
ShowEditButton="True" ShowInsertButton="True" UpdateText="Save">
</asp:CommandField>
</Columns>
</asp:GridView>
没有找到相关结果
已邀请:
1 个回复
河饶办斜施
和