Asp.net 为什么radgrid ItemCommand事件中的我的e.item始终为空

Asp.net 为什么radgrid ItemCommand事件中的我的e.item始终为空,asp.net,telerik,radgrid,Asp.net,Telerik,Radgrid,我使用RadGrid控件,创建了一组命令按钮,如插入、更新、保存和删除。当我点击insert按钮时,RadGrid可以进入insert模式,但当我在输入数据后点击save按钮时,e.item始终为空?如何在editmode/insermode中获取项的Radgrid值 以下是部分代码: asp: 提前谢谢。这可能会帮助您。。。 根据代码中注释的说明 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack

我使用RadGrid控件,创建了一组命令按钮,如插入、更新、保存和删除。当我点击insert按钮时,RadGrid可以进入insert模式,但当我在输入数据后点击save按钮时,e.item始终为空?如何在editmode/insermode中获取项的Radgrid值

以下是部分代码: asp:

提前谢谢。

这可能会帮助您。。。 根据代码中注释的说明

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("A");

        for (int i = 0; i < 10; i++ )
            dt.Rows.Add("1 " + i);

        ViewState["Da"] = dt;

        rg.DataSource = dt;
        rg.DataBind();

    }
}

protected void rg_ItemCommand(object sender, GridCommandEventArgs e)
{
    // Check
    if (e.CommandName == "SaveTrigger")
    {

        // Variable
        string value = string.Empty;
        TextBox txt = null;

        // Check
        if (e.Item is GridDataInsertItem)
        {
            // Set Init Insert Items 
            GridDataInsertItem item = e.Item as GridDataInsertItem;

            // Get Textbox from Insert New Item
            txt = item.FindControl("txt") as TextBox;
        }
        else
        {

            // This will get the first line of the Edit Item
            GridEditableItem editItem = rg.EditItems[0] as GridEditableItem;

            // Or
            // This will get be using Index Number through the button which you press save
            // GridDataItem editItem = rg.Items[e.Item.ItemIndex] as GridDataItem;
            txt = editItem.FindControl("txt") as TextBox;
        }

        Response.Write(txt.Text.Trim());           
    }
}

protected void rg_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    rg.DataSource = ViewState["Da"] as DataTable;
}
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack)
{
DataTable dt=新的DataTable();
dt.列。添加(“A”);
对于(int i=0;i<10;i++)
dt.行。添加(“1”+i);
视图状态[“Da”]=dt;
rg.DataSource=dt;
rg.DataBind();
}
}
受保护的void rg_ItemCommand(对象发送方,GridCommandEventArgs e)
{
//检查
如果(e.CommandName==“SaveTrigger”)
{
//变数
字符串值=string.Empty;
TextBox txt=null;
//检查
如果(例如,项为GridDataInsertItem)
{
//设置初始插入项
GridDataInsertItem=e.项作为GridDataInsertItem;
//从“插入新项”获取文本框
txt=item.FindControl(“txt”)作为文本框;
}
其他的
{
//这将获得编辑项的第一行
GridEditableItem editItem=rg.EditItems[0]作为GridEditableItem;
//或
//这将通过按下save(保存)按钮使用索引号获得
//GridDataItem editItem=rg.Items[e.Item.ItemIndex]作为GridDataItem;
txt=editItem.FindControl(“txt”)作为文本框;
}
Write(txt.Text.Trim());
}
}
受保护的void rg_NeedDataSource(对象发送方,GridNeedDataSourceEventArgs e)
{
rg.DataSource=ViewState[“Da”]作为数据表;
}

谢谢。但它说争论超出了范围。“GridEditableItem editItem=rg.EditItems[0]作为GridEditableItem;”@HenryLee只是想知道您的项目是否处于编辑模式?也许您可以在
RadGridLandBlock.EditItem.Count>0
上进行检查。。该错误意味着您的RadGridThank中没有可编辑项。我试过了。是0。但是“RadGridLandBlock.MasterTableView.IsItemInserted=true”确实使RadGrid的第一行处于插入模式。我怀疑插入/编辑模式是在客户端,而不是在数据源端,所以“e.item”不起作用?但是Radgrid是一个服务器控件,我认为insert/edit行中的值应该被提取。有什么帮助吗?编辑按钮的那部分可以。RadGridLandBlock.EditItem.Count=1。但“插入”按钮的部分仍然不起作用。@HenryLee正在睡觉,因为我最后一次回复是在晚上11点。。。我已经更新了答案。。你可以看看
 protected void RadGridLandBlock_ItemCommand(object sender, GridCommandEventArgs e)
    {
        //insert btn clicked
        if (e.CommandName == "InsertBtn")
        {
            LabelTest.Text = "insert btn from itemcommand is fired";
            RadGridLandBlock.MasterTableView.IsItemInserted = true;

            RadGridLandBlock.Rebind();
        }
//Save btn clicked
        if (e.CommandName=="SaveBtn")
        {
            LabelTest.Text = "SaveBtn from itemcommand is fired";
                myCnn = new SqlConnection(myCnnstring);
                myCnn.Open();
                mysql = "insert into ld_landblock (PK_bookID,landblockname,capacityrate,pk_period,pk_userIDlasteditor) " +
                " values(@pk_bookid, @landblockname,@capacityrate,@pk_period,@pk_userIDlasteditor)";
                mycmd = new SqlCommand(mysql, myCnn);
                GridEditFormItem editItem = e.Item as GridEditFormItem;
                mycmd.Parameters.AddWithValue("@pk_bookid", Convert.ToInt32((editItem.FindControl("PK_BookID") as TextBox).Text));//HERE IS THE ERROR OCCURED)
                mycmd.Parameters.AddWithValue.......
  }
}



    protected void RadGridLandBlock_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
    {
       // RadGridLandBlock.MasterTableView.IsItemInserted = false;
        PK_bookID = Convert.ToInt32(ViewState["PK_BookID"]);
        PK_period = Convert.ToInt32(ViewState["PK_Period"]);
        (sender as RadGrid).DataSource = GetGridDatatable();

    }


    protected void RadGridLandBlock_ItemCreated(object sender, GridItemEventArgs e)
    {


    }
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("A");

        for (int i = 0; i < 10; i++ )
            dt.Rows.Add("1 " + i);

        ViewState["Da"] = dt;

        rg.DataSource = dt;
        rg.DataBind();

    }
}

protected void rg_ItemCommand(object sender, GridCommandEventArgs e)
{
    // Check
    if (e.CommandName == "SaveTrigger")
    {

        // Variable
        string value = string.Empty;
        TextBox txt = null;

        // Check
        if (e.Item is GridDataInsertItem)
        {
            // Set Init Insert Items 
            GridDataInsertItem item = e.Item as GridDataInsertItem;

            // Get Textbox from Insert New Item
            txt = item.FindControl("txt") as TextBox;
        }
        else
        {

            // This will get the first line of the Edit Item
            GridEditableItem editItem = rg.EditItems[0] as GridEditableItem;

            // Or
            // This will get be using Index Number through the button which you press save
            // GridDataItem editItem = rg.Items[e.Item.ItemIndex] as GridDataItem;
            txt = editItem.FindControl("txt") as TextBox;
        }

        Response.Write(txt.Text.Trim());           
    }
}

protected void rg_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    rg.DataSource = ViewState["Da"] as DataTable;
}