การเปลี่ยนสีของแถว DataGridView

ฉันมีปัญหากับ onDataRowBound ดูเหมือนว่าจะใส่สีให้กับทั้งคอลัมน์ของเซลล์[0] เซลล์อื่นๆ มีค่าอยู่แต่ยังคงให้สีแก่เซลล์ของฉัน นี่คือรหัสของฉัน

protected void GridUserMessage_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (String.IsNullOrWhiteSpace(e.Row.Cells[0].Text))
        {
            e.Row.BackColor = System.Drawing.Color.Red;
        }
    }
}

เกิดอะไรขึ้นกับเรื่องนี้?


person EnzoZow    schedule 17.05.2017    source แหล่งที่มา


คำตอบ (2)


เพิ่ม else บล็อกที่คุณตั้งค่าสีของเซลล์เป็นสีขาว (หรือสีอื่นที่ตารางของคุณมีตามค่าเริ่มต้น)

protected void GridUserMessage_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (String.IsNullOrWhiteSpace(e.Row.Cells[0].Text))
        {
            e.Row.BackColor = System.Drawing.Color.Red;
        }
        else
        {
            e.Row.BackColor = System.Drawing.Color.White;
        }
    }
}

แก้ไข: ฉันคิดว่าสไตล์ CSS น่าจะเป็นแนวทางที่ดีกว่าในการทำเช่นนี้ ในมาร์กอัปของคุณให้ตั้งค่าคลาส CSS ให้กับแถวของคุณและในเหตุการณ์ RowDataBound ให้ตั้งค่าคลาสอื่นตามต้องการ บางสิ่งเช่นนี้:

กำหนดสไตล์ "ปกติ" ในมาร์กอัป

<asp:GridView runat="server" RowStyle="normal-row" ...>

และในเมธอด RowDataBound ของคุณ ให้ตั้งค่าคลาสอื่นหากค่าของเซลล์เป็นสตริงว่าง เช่นนี้

e.Row.CssClass = "red-row";
person Nino    schedule 17.05.2017

คุณกำลังตรวจสอบค่า Cell[0] จะเกิดอะไรขึ้นหากคุณเปลี่ยนแปลงขั้นตอนการจัดเก็บฐานข้อมูลส่วนหลังและจัดเรียงชื่อคอลัมน์ใหม่ในรายการที่เลือก ตัวอย่างเช่น คุณกำลังมี

ก่อน

SELECT Id,FirstName,LastName FROM EMPLOYEE

หลังจากที่คุณ/คนอื่นเปลี่ยนเป็น

SELECT Id,LastName,FirstName FROM EMPLOYEE

รหัสของคุณจะถูกยุบได้ง่าย ดังนั้นจึงควรตรวจสอบ DataItem ของแถวนั้นเพื่อหาค่าที่มีชื่อและขึ้นอยู่กับว่าคุณสามารถตัดสินใจได้ ดูโค้ดที่เขียนใหม่จากโค้ดของคุณ

 protected void GridUserMessage_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
  // Check database column has value or not.  
  if(String.IsNullOrEmpty(Convert.ToString(DataBinder.Eval(e.Row.DataItem, "ColumnNameOfDataYouWantToCheck")))
    {
        e.Row.BackColor = System.Drawing.Color.Red;
    }
 }
}
person yogesh keraliya    schedule 17.05.2017