GridView使用DataKeyNames的例子 & CommandArgument传递多个参数 & 获取GridView编辑状态下单元格里的值
2010-11-25 10:08
751 查看
在asp.net2.0中,当我们需要在GridView的ItemDataBound之类的事件中需要获取当前行的一些关联性的数据值,但这些数据值又 不能直接体现在GridView的列中显示出来,这时我们可以采用DataKeyNames的方式来获取此类数据,看下面的代码示例:
前台代码:
<asp:GridView ID="GridView1" runat="server" DataKeyNames="Grup" OnRowCommand="GridView1_RowCommand" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#Eval("GrupName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:ButtonField Text="按钮" />
</Columns>
</asp:GridView>
其中:Grup为我们想使用但不需要显示的列。(如果有多个字段,使用逗号分开)
后台代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack )
{
DataTable dt = new DataTable();
dt.Columns.Add("Grup");
dt.Columns.Add("GrupName");
dt.Rows.Add(new object[] { 0,"营业部" });
dt.Rows.Add(new object[] { 1,"市场部" });
this.GridView1.DataSource = dt;
this.GridView1.DataBind();
}
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
// 获取当前行索引
int index = Convert.ToInt32(e.CommandArgument);
// 取出当前行数据键值对象中的值
string strGrup = ((GridView)sender).DataKeys[index].Values["Grup"].ToString();
}
顺便补充一句。
如果你使用模板列中放置按钮控件的方式,要想在按钮事件中获取这种字段值就更简单了。
只需要在按钮的CommandArgument属性设置为想绑定的字段,如:
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" CommandArgument=' <%#Eval("Grup") %>' />
</ItemTemplate>
</asp:TemplateField>
按钮事件中如是写:
protected void Button2_Click(object sender, EventArgs e)
{
string strGrup = ((Button)sender).CommandArgument.ToString();
}
GridView控件给CommandArgument传递多个参数示例
GridView控件给CommandArgument传递多个参数示例,具体示例如下:
c#代码protected void GVSecondType_RowCommand(object sender, GridViewCommandEventArgs e)
{
string cmdName = e.CommandName;
if (cmdName == "del")
{
string[] estr = e.CommandArgument.ToString().Split(',');
int Parent_Id = Convert.ToInt32(estr[0]);
int TypeId = Convert.ToInt32(estr[1]);
bool flag = YHTBLL.Second_TypeManage.DelTypeById(Parent_Id, TypeId);
if (flag)
{
this.Literal1.Text = "删 除 成 功";
bind();
}
else
{
this.Literal1.Text = "删 除失 败";
bind();
} } }
.net如何获取GridView编辑状态下单元格里的值?先看下面这段代码
var txtName = grid1.Rows[e.RowIndex].Cells[0].FindControl("txtName") as TextBox;
if (txtName != null)
{
// 读取值
//
}
其实这些工作(在单元格中查找控件,并尝试获取其中的值)已经被封装了。现在,只要调用 ExtractValuesFromCell 方法即可。
而该方法也被很多种列类型所支持:
DataControlField, BoundField, AutoGeneratedField, CheckBoxField, ImageField, TemplateField, DynamicField
你可以在 GridView 的 RowUpdating, RowDeleting 等事件中使用它。利用该方法,可以将值提取到所需的字典里去,然后再从字典中读取。这些字典包括:e.Keys, e.NewValues, e.OldValues 等。
一小段例子代码:
// 更新
protected void grid1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
var row = grid1.Rows[e.RowIndex];
// 提取 Id 字段的值
grid1.Columns[0].ExtractValuesFromCell(
e.Keys,
row.Cells[0] as DataControlFieldCell,
DataControlRowState.Edit,
true /* include readonly */);
// 提取 Name 字段的值
grid1.Columns[1].ExtractValuesFromCell(
e.NewValues,
row.Cells[1] as DataControlFieldCell,
DataControlRowState.Edit,
true /* include readonly */);
var id = int.Parse(e.Keys["id"].ToString());
var name = (string) e.NewValues["name"];
// 执行相关的数据库更新操作
//
}
这样,在大多数场合我们可以尽可能多的使用 BoundField,并且也能正确读取到其编辑时的值,省下自定义 TemplateField 的一堆代码了。
前台代码:
<asp:GridView ID="GridView1" runat="server" DataKeyNames="Grup" OnRowCommand="GridView1_RowCommand" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#Eval("GrupName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:ButtonField Text="按钮" />
</Columns>
</asp:GridView>
其中:Grup为我们想使用但不需要显示的列。(如果有多个字段,使用逗号分开)
后台代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack )
{
DataTable dt = new DataTable();
dt.Columns.Add("Grup");
dt.Columns.Add("GrupName");
dt.Rows.Add(new object[] { 0,"营业部" });
dt.Rows.Add(new object[] { 1,"市场部" });
this.GridView1.DataSource = dt;
this.GridView1.DataBind();
}
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
// 获取当前行索引
int index = Convert.ToInt32(e.CommandArgument);
// 取出当前行数据键值对象中的值
string strGrup = ((GridView)sender).DataKeys[index].Values["Grup"].ToString();
}
顺便补充一句。
如果你使用模板列中放置按钮控件的方式,要想在按钮事件中获取这种字段值就更简单了。
只需要在按钮的CommandArgument属性设置为想绑定的字段,如:
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" CommandArgument=' <%#Eval("Grup") %>' />
</ItemTemplate>
</asp:TemplateField>
按钮事件中如是写:
protected void Button2_Click(object sender, EventArgs e)
{
string strGrup = ((Button)sender).CommandArgument.ToString();
}
GridView控件给CommandArgument传递多个参数示例
GridView控件给CommandArgument传递多个参数示例,具体示例如下:
c#代码protected void GVSecondType_RowCommand(object sender, GridViewCommandEventArgs e)
{
string cmdName = e.CommandName;
if (cmdName == "del")
{
string[] estr = e.CommandArgument.ToString().Split(',');
int Parent_Id = Convert.ToInt32(estr[0]);
int TypeId = Convert.ToInt32(estr[1]);
bool flag = YHTBLL.Second_TypeManage.DelTypeById(Parent_Id, TypeId);
if (flag)
{
this.Literal1.Text = "删 除 成 功";
bind();
}
else
{
this.Literal1.Text = "删 除失 败";
bind();
} } }
.net如何获取GridView编辑状态下单元格里的值?先看下面这段代码
var txtName = grid1.Rows[e.RowIndex].Cells[0].FindControl("txtName") as TextBox;
if (txtName != null)
{
// 读取值
//
}
其实这些工作(在单元格中查找控件,并尝试获取其中的值)已经被封装了。现在,只要调用 ExtractValuesFromCell 方法即可。
而该方法也被很多种列类型所支持:
DataControlField, BoundField, AutoGeneratedField, CheckBoxField, ImageField, TemplateField, DynamicField
你可以在 GridView 的 RowUpdating, RowDeleting 等事件中使用它。利用该方法,可以将值提取到所需的字典里去,然后再从字典中读取。这些字典包括:e.Keys, e.NewValues, e.OldValues 等。
一小段例子代码:
// 更新
protected void grid1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
var row = grid1.Rows[e.RowIndex];
// 提取 Id 字段的值
grid1.Columns[0].ExtractValuesFromCell(
e.Keys,
row.Cells[0] as DataControlFieldCell,
DataControlRowState.Edit,
true /* include readonly */);
// 提取 Name 字段的值
grid1.Columns[1].ExtractValuesFromCell(
e.NewValues,
row.Cells[1] as DataControlFieldCell,
DataControlRowState.Edit,
true /* include readonly */);
var id = int.Parse(e.Keys["id"].ToString());
var name = (string) e.NewValues["name"];
// 执行相关的数据库更新操作
//
}
这样,在大多数场合我们可以尽可能多的使用 BoundField,并且也能正确读取到其编辑时的值,省下自定义 TemplateField 的一堆代码了。
相关文章推荐
- GridView使用DataKeyNames的例子 & CommandArgument传递多个参数 & 获取GridView编辑状态下单元格里的值
- 在ASP.NET GridView 中使用e.CommandArgument传递参数
- GridView中通过CommandArgument传递多个参数的例子
- 如何获取 GridView 编辑状态下单元格里的值
- 2. 如何获取 GridView 编辑状态下单元格里的值?
- 如何获取 GridView 编辑状态下单元格里的值?
- 如何获取 GridView 编辑状态下单元格里的值
- 如何获取 GridView 编辑状态下单元格里的值
- 在Gridview的模板里,控件的CommandArgument向后台传递多个参数
- 获取 GridView 编辑状态下单元格里的值
- 获取 GridView 编辑状态下单元格里的值
- 如何获取 GridView 编辑状态下单元格里的值?
- LinkButton中使用CommandArgument传递参数
- 获取 GridView 编辑状态下单元格里的值
- 视频版(如何访问接口(URL)/传递参数/获取参数/使用参数)
- 怎样将DevExpress中的GridView的某一个单元格的状态设置为编辑或不可编辑
- shell 参数列表的获取&shell使用的一些总结
- System.ArgumentException: 回发或回调参数无效。在配置中使用 < pages enableEventValidation="true"/>
- 使用shell写cgi,并获取html传递的参数
- android使用webview登录,获取session传递到httpclient小例子