Data bytes not received at DataReceived event of serial port?

I am writing a small application which works on serial port when port ("COM10" in my case) receives data it doesn't receive full byte and sometimes it receives some bytes and again receives some bytes. Why it happened?? I want to receive all bytes at one time so that i can do further processing , I just guessed that dataReceived event triggers at every byte but I want to trigger it only when full data comes. please give me suggestions and edit my code if possible .
Thanks everyone!

Here is my code,

public void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{

for (int p = 0; p >= 0; p++)
{
int dataLength = _serialPort.BytesToRead;
byte[] data = new byte[dataLength];

int nbrDataRead = _serialPort.Read(data, 0, dataLength);

if (nbrDataRead == 0)
return;
// Send data to whom ever interested
if (NewSerialDataRecieved != null)
{
NewSerialDataRecieved(this, new SerialDataEventArgs(data));
}

for (int i = 0; i < nbrDataRead; i++)
{
Convert.ToChar(data[i]);
}
}