ฉันจะรับ TotalRowCount จาก LinqDataSource เป็นตัวอักษรได้อย่างไร

ฉันมี LinqDataSource ที่ฉันใช้ในการคำนวณจำนวนแถวในตาราง ฉันต้องการอัปเดตค่าตัวอักษรด้วยตัวเลขด้วยรหัสต่อไปนี้นำมาจาก MSDN (linqdatasourcestatuseventargs.totalrowcount.aspx):

protected void linqDataSource1_Selected(object sender, LinqDataSourceStatusEventArgs e)
{
    Literal1.Text = e.TotalRowCount.ToString();
}

ฉันจะทริกเกอร์เหตุการณ์ที่เลือกบนแหล่งข้อมูลได้อย่างไร คลาส SqlDataSource มีเมธอด Select() เพื่อให้สามารถทริกเกอร์โดยทางโปรแกรมเช่น Page_Load แต่ LinqDataSource ไม่มีวิธีนี้ ขณะนี้ฉันแก้ไขปัญหาด้วยการผูกแหล่งข้อมูลของฉันกับองค์ประกอบ FormView ที่ว่างเปล่า แต่นี่น่าเกลียดเกินไป

ฉันรู้สึกค่อนข้างมั่นใจว่ามีวิธีที่ดีกว่ามากในการรวมจำนวนแถวทั้งหมดลงในตัวอักษรของฉันเมื่อใช้ LinqToSql ฉันแค่ไม่รู้ว่าต้องทำอย่างไร

คำแนะนำโดย tvanfosson ในการแนบวิธีการเข้ากับเหตุการณ์ที่เลือกของแหล่งข้อมูล ไม่สามารถแก้ปัญหาของฉันได้ เนื่องจากเหตุการณ์ที่เลือกยังคงไม่ถูกทริกเกอร์เมื่อโหลดเพจ (ฉันได้แนบเมธอด _Selected กับแอตทริบิวต์ OnSelected ไว้แล้ว เช่นนี้)

<asp:LinqDataSource ID="linqDataSource1" runat="server"
    OnSelected="linqDataSource1_Selected">

person Jan Aagaard    schedule 17.11.2008    source แหล่งที่มา
comment
เป็นวิธีการ Linq... หรือ linq... (ตัวพิมพ์ต่าง) หรือไม่ คะแนน OnSelected ของคุณ @ linq... แต่ชื่อวิธีคือ Linq...   -  person GalacticCowboy    schedule 19.11.2008
comment
ขอบคุณที่สังเกตเห็น นั่นเป็นเพียงประเภทเท่านั้น =)   -  person Jan Aagaard    schedule 20.11.2008


คำตอบ (2)


เชื่อมต่อวิธีการของคุณในฐานะตัวจัดการเหตุการณ์สำหรับเหตุการณ์ที่เลือกใน Page_Load

public void Page_Load( object sender, EventArgs e )
{
     linqDataSource1.Selected += LinqDataSource1_Selected;
}

protected void LinqDataSource1_Selected(object sender, LinqDataSourceStatusEventArgs e)
{
    Literal1.Text = e.TotalRowCount.ToString();
}
person tvanfosson    schedule 18.11.2008

ฉันลงเอยด้วยการวางแหล่งข้อมูลและใส่โค้ดไว้ในโค้ดด้านหลังแทน ไม่ใช่การเขียนโปรแกรมแบบชี้แล้วคลิกอย่างที่ฉันต้องการ แต่ก็ยังค่อนข้างสั้น ฉันมีลักษณะเช่นนี้:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        var context = new MyDataContext();

        numberOfModificationsLiteral.Text =
            (
                from modification in context.Modifications
                where modification.Start >= DateTime.Now
                select modification
            ).Count().ToString();
    }
}
person Jan Aagaard    schedule 19.11.2008