none
求教高手关于LinqDataSource_Updating事件 RRS feed

  • 问题

  • 测试一段代码,label根本没变还是显示原来的空白text,可是linq数据的确是改变了,是不是这个事件没有激活,如何才能击活。

      protected void LinqDataSource5_Updating(object sender, LinqDataSourceUpdateEventArgs e)
            {
                DataClasses1DataContext db1=new DataClasses1DataContext();
                           
                           var irto = (it_resource_temp)e.OriginalObject;
                           var irtn = (it_resource_temp)e.NewObject;
                           if (irto.Tempcount != irtn.Tempcount)
                           {
                               this.Label1.Text = irto.Tempcount.Value.ToString() + "  change " + irtn.Tempcount.Value.ToString();
                           }
                           else
                           {
                               this.Label1.Text = irto.Tempcount.Value.ToString() + "  nochange " + irtn.Tempcount.Value.ToString();
                           }
                
            }
            


    • 已编辑 hzpemu 2012年5月24日 4:16
    2012年5月24日 4:15

答案

  • "可是linq数据的确是改变了,是不是这个事件没有激活,如何才能击活"

    你利用LinqDataSource数据源控件的更新操作来更新数据的吗,最好贴出你的aspx页面的代码,因为我测试了一下,没有什么问题的!

    我的aspx页面关键代码:

    <form id="form1" runat="server">
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    
        <asp:LinqDataSource ID="LinqDataSource1" EnableUpdate="true" runat="server" ContextTypeName="DataClassesDataContext"
            EntityTypeName="" TableName="votes" OnUpdating="LinqDataSource1_Updating">
        </asp:LinqDataSource>
    
        <asp:DetailsView DataKeyNames="id" AutoGenerateEditButton="true" AllowPaging="true"
            DataSourceID="LinqDataSource1" ID="DetailsView1" runat="server" Height="50px"
            Width="125px">
        </asp:DetailsView>
    
    </form>

    aspx.cs关键代码:

    protected void LinqDataSource1_Updating(object sender, LinqDataSourceUpdateEventArgs e)
        {
            var irto = (vote)e.OriginalObject;
            var irtn = (vote)e.NewObject;
            if (irto.name != irtn.name)
            {
                this.Label1.Text = irto.name + "  change " + irtn.name;
            }
            else
            {
                this.Label1.Text = irto.name + "  nochange " + irtn.name;
            }
        }

    我的测试表是vote,有id、name字段

    还有一个DataClasses.dbml文件映射到数据库

    2012年5月25日 1:23

全部回复

  • 断点调试,有没有进入这个事件?

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月24日 4:44
    版主
  • 断点能查看到irto.Tempcount和 irtn.Tempcount两个值的不同,但是为什么label.text 属性没变化呢?不明白。
    2012年5月24日 5:24
  • 照例而言应该变化的……尝试这样做法:

    1)

    protected void LinqDataSource5_Updating(object sender, LinqDataSourceUpdateEventArgs e)
            {
                           var irto = (it_resource_temp)e.OriginalObject;
                           var irtn = (it_resource_temp)e.NewObject;
                           if (irto.Tempcount != irtn.Tempcount)
                           {
                               ViewState["des"]= irto.Tempcount.Value.ToString() + "  change " + irtn.Tempcount.Value.ToString();
                           }
                           else
                           {
                               ViewState["des"] =  irto.Tempcount.Value.ToString() + "  nochange " + irtn.Tempcount.Value.ToString();
                           }
                
            }
            

    然后在Page_Load中:

    Label1.Text = ViewState["des"]==null?String.Empty:ViewState["des"].ToString();


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月24日 5:28
    版主
  • "可是linq数据的确是改变了,是不是这个事件没有激活,如何才能击活"

    你利用LinqDataSource数据源控件的更新操作来更新数据的吗,最好贴出你的aspx页面的代码,因为我测试了一下,没有什么问题的!

    我的aspx页面关键代码:

    <form id="form1" runat="server">
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    
        <asp:LinqDataSource ID="LinqDataSource1" EnableUpdate="true" runat="server" ContextTypeName="DataClassesDataContext"
            EntityTypeName="" TableName="votes" OnUpdating="LinqDataSource1_Updating">
        </asp:LinqDataSource>
    
        <asp:DetailsView DataKeyNames="id" AutoGenerateEditButton="true" AllowPaging="true"
            DataSourceID="LinqDataSource1" ID="DetailsView1" runat="server" Height="50px"
            Width="125px">
        </asp:DetailsView>
    
    </form>

    aspx.cs关键代码:

    protected void LinqDataSource1_Updating(object sender, LinqDataSourceUpdateEventArgs e)
        {
            var irto = (vote)e.OriginalObject;
            var irtn = (vote)e.NewObject;
            if (irto.name != irtn.name)
            {
                this.Label1.Text = irto.name + "  change " + irtn.name;
            }
            else
            {
                this.Label1.Text = irto.name + "  nochange " + irtn.name;
            }
        }

    我的测试表是vote,有id、name字段

    还有一个DataClasses.dbml文件映射到数据库

    2012年5月25日 1:23
  • 您好:)

    那么请你先选中LinqDataSource,把属性面板切换到“事件”状态(点击闪电图标),查看Updating事件有没有和你的方法绑定上?谢谢!


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月25日 1:30
    版主
  • 事件是有激活的,这个我确定了,就是不知道为什么label属性没改变。不过还是谢谢你们。
    2012年5月28日 3:43
  • 事件是有激活的?

    这个事件里面的代码执行的?

    2012年5月28日 15:46